Spatial Planning and Connectivity Corpus - Technical Background Report

IPBES Spatial Planning and Connectivity Assessment

Authors

Rainer M. Krug

Gabriella Bishop

Sebastian Villasante

Doi
Abstract

To Be added

Version GitHub License: CC BY 4.0

Version Build

Disclaimer

LLM Usage Disclosure

Code and charts in this project have been generated with the assistance of the codex LLM tools in Positron. All content and code is based on conceptuaisation by the authors and has been thoroughly reviewed and edited by humans afterwards.

Contributors

Assessment Experts

  • xxx, yyy ORCID

Data and Knowledge tsu

Working Title

IPBES_SPC_Corpus

Code repo

Github repository

Introduction

The literature search for the Spatial Planning and Connectivity assessment corpus was conducted using search terms provided by the experts and refined in co-operation with the IPBES task force for data and knowledge management. The search was conducted using OpenAlex, scripted from R to use the OpenAlex API. Search terms for the following searches were defined:

  • Spatial Planning and Connectivity,
  • Nature / Environment
  • additional search terms for specific corpora

To assess the quality of the corpus, sets of key papers were selected by the experts to verify if these are in the corpus.

The following terminology is used in this document:

  • Corpus: A body of works as based on a search on OpenAlex
  • Spatial Planning and Connectivity Assessment Corpus: Short: SPC corpus; The corpus resulting from the search terms TO BE ADDED
  • work: terminology used for a single document in their dataset. Each work has a unique OpenAlex id, but not necessarily a DOI.

The following searches are conducted on Title and Abstract only to account for fluctuating availability of full text searches and make the search more focussed..

Schematic Overview

This is a schematic overview of the search strategy. It is shown again in the Results section with the numbers of resulting hits. ### Overview

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart TD
    Start([Start literature search]) --> SPC["<u><span style='color:#1a0dab;'>spc_corpus.yaml<br/>Assemble base SPC corpus</span></u>"]
    click SPC "./input/search_terms/spc_corpus.yaml" "Open spc_corpus.yaml"
    SPC --> SPC_list["spc keyword set<br/>(planning & connectivity terms)<br/>(n = <<SPC_LIST>>)"
]
    SPC --> NATURE_list["nature keyword set<br/>(environmental context terms)<br/>(n = <<NATURE_LIST>>)"
]
    SPC_list --> BaseQuery["Level 1 query<br/>spc terms AND nature dictionary<br/>(n = <<BASE_QUERY>>)"
]
    NATURE_list --> BaseQuery

    BaseQuery --> ChapterSelect{Apply chapter / theme refinements}

    ChapterSelect --> CH1["<u><span style='color:#1a0dab;'>Chapter 1<br/>chapter_1.yaml<br/>Governance & planning principles</span></u>"]
    click CH1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"
    ChapterSelect --> CH2["<u><span style='color:#1a0dab;'>Chapter 2<br/>chapter_2.yaml<br/>GBF targets, nexus themes, SDGs</span></u>"]
    click CH2 "./input/search_terms/chapter_2.yaml" "Open chapter_2.yaml"
    ChapterSelect --> CH3["<u><span style='color:#1a0dab;'>Chapter 3<br/>chapter_3.yaml<br/>Restoration & conservation planning</span></u>"]
    click CH3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"
    ChapterSelect --> CH4["<u><span style='color:#1a0dab;'>Chapter 4<br/>chapter_4.yaml<br/>Connectivity evidence & metrics</span></u>"]
    click CH4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"
    ChapterSelect --> CH5["<u><span style='color:#1a0dab;'>Chapter 5<br/>chapter_5.yaml<br/>Foresight & futures (sections, themes, cross-cutting)</span></u>"]
    click CH5 "./input/search_terms/Chapter_5_1_2.yaml" "Open Chapter 5 search terms"
    ChapterSelect --> CH6["<u><span style='color:#1a0dab;'>Chapter 6<br/>chapter_6.yaml (+ chapter_6_r2.yaml optional)<br/>Enabling environment</span></u>"]
    click CH6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

Chapter 1

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch1["<u><span style='color:#1a0dab;'>chapter_1.yaml<br/>Level 2 refinements</span></u>"]
    click Ch1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"

    subgraph Chapter1Sets["Chapter 1 thematic searches"]
        direction TB
        C1_1["Set 1:<br/>land/spatial planning<br/>+ biodiversity goals<br/>+ societal needs/values<br/>(n = <<C1_1>>)"]
        C1_2["Set 2:<br/>adaptive/scenario planning<br/>+ monitoring/feedback<br/>(n = <<C1_2>>)"]
        C1_3["Set 3:<br/>evidence & precaution<br/>+ ILK knowledge base<br/>(n = <<C1_3>>)"]
        %% C1_4["Set 4:<br/>multilevel/transparent governance<br/>+ customary coherence<br/>(n = <<C1_4>>)"]
        %% C1_5["Set 5:<br/>participatory planning<br/>+ co-design / engagement<br/>(n = <<C1_5>>)"]
        %% C1_6["Set 6:<br/>equity / rights / tenure<br/>+ justice outcomes<br/>(n = <<C1_6>>)"]
        %% C1_7["Set 7:<br/>connectivity (land-sea/cross-scale)<br/>+ nexus & climate links<br/>(n = <<C1_7>>)"]
    end

    Ch1 --> C1_1
    Ch1 --> C1_2
    Ch1 --> C1_3
    %% Ch1 --> C1_4
    %% Ch1 --> C1_5
    %% Ch1 --> C1_6
    %% Ch1 --> C1_7

Search Terms

Click chapter_1.yaml to download

Show the code
params$search_terms$chapter_1 |>
  yaml::as.yaml() |>
  cat()
Set 1:
- ((indigenous AND (knowledge OR perspectives OR governance OR rights OR values OR
  practices OR land OR territory)) OR "local knowledge" OR biocultural OR customary
  OR (diverse AND ("knowledge systems" OR "world views" OR worldviews))) AND
- (planning OR governance OR policy OR tenure OR rights) AND
- (just OR inclusive OR fair OR effective OR equity OR equitable)
Set 2:
- ("multi-level" OR integrated OR accountable OR customary OR diverse OR "context-dependent"
  OR "cross-scale" OR polycentric OR pluralism OR adaptive) AND
- (governance OR policy OR framework) AND
- ("spatial planning" OR "marine planning" OR management OR "land-use" OR "sea-use")
Set 3:
- (participatory OR community OR "co-design" OR stakeholder OR plurality OR tailored
  OR "different contexts" OR transformative OR adaptive OR "place-based" OR integrated
  OR multifunctional OR diverse) AND
- (approach OR strategy OR practice OR plan OR policy OR framework OR instrument)
  AND
- (landscape OR seascape OR watershed OR ecosystem OR area OR region OR "land-sea"
  OR connectivity OR marine OR ocean OR maritime)

Chapter 2

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch2L2["<u><span style='color:#1a0dab;'>chapter_2.yaml<br/>Level 2 GBF bundles</span></u>"]
    click Ch2L2 "../search_terms/chapter_2.yaml" "Open chapter_2.yaml"

    subgraph L1_GBF["GBF contexts & targets"]
        direction TB
        GBF_Urban["GBF-1 Urban<br/>(n = <<GBF_Urban>>)"]
        GBF_Rural["GBF-1 Rural<br/>(n = <<GBF_Rural>>)"]
        GBF_Fresh["GBF-1 Freshwater<br/>(n = <<GBF_Fresh>>)"]
        GBF_Marine["GBF-1 Marine<br/>(n = <<GBF_Marine>>)"]
        GBF_Restore["GBF-2 Ecosystem restoration<br/>(n = <<GBF_Restore>>)"]
    end
    Ch2L2 --> GBF_Urban
    Ch2L2 --> GBF_Rural
    Ch2L2 --> GBF_Fresh
    Ch2L2 --> GBF_Marine
    Ch2L2 --> GBF_Restore

    subgraph L1_TARGET["GBF contexts & targets"]
        T3["Target 3<br/>(n = <<T3>>)"]
        T4["Target 4<br/>(n = <<T4>>)"]
        T5["Target 5<br/>(n = <<T5>>)"]
        T6["Target 6<br/>(n = <<T6>>)"]
        T7["Target 7<br/>(n = <<T7>>)"]
        T8["Target 8<br/>(n = <<T8>>)"]
        T9["Target 9<br/>(n = <<T9>>)"]
        T10["Target 10<br/>(n = <<T10>>)"]
        T11["Target 11<br/>(n = <<T11>>)"]
        T12["Target 12<br/>(n = <<T12>>)"]
        T13["Target 13<br/>(n = <<T13>>)"]
        T14["Target 14<br/>(n = <<T14>>)"]
        T15["Target 15<br/>(n = <<T15>>)"]
        T16["Target 16<br/>(n = <<T16>>)"]
        T17["Target 17<br/>(n = <<T17>>)"]
        T18["Target 18<br/>(n = <<T18>>)"]
        T19["Target 19<br/>(n = <<T19>>)"]
        T20["Target 20<br/>(n = <<T20>>)"]
        T21["Target 21<br/>(n = <<T21>>)"]
        T22["Target 22<br/>(n = <<T22>>)"]
        T23["Target 23<br/>(n = <<T23>>)"]
    end
    Ch2L2 --> T3
    Ch2L2 --> T4
    Ch2L2 --> T5
    Ch2L2 --> T6
    Ch2L2 --> T7
    Ch2L2 --> T8
    Ch2L2 --> T9
    Ch2L2 --> T10
    Ch2L2 --> T11
    Ch2L2 --> T12
    Ch2L2 --> T13
    Ch2L2 --> T14
    Ch2L2 --> T15
    Ch2L2 --> T16
    Ch2L2 --> T17
    Ch2L2 --> T18
    Ch2L2 --> T19
    Ch2L2 --> T20
    Ch2L2 --> T21
    Ch2L2 --> T22
    Ch2L2 --> T23

    subgraph L1_REL["Spatial Planning Related"]
        REL["Spatial Planning Related<br/>(n = <<REL>>)"]
    end
    Ch2L2 --> REL

    subgraph L1_NexusSets["Nexus"]
        direction TB
        Nexus_Water["Water<br/>(n = <<Nexus_Water>>)"]
        Nexus_Food["Food<br/>(n = <<Nexus_Food>>)"]
        Nexus_Health["Health<br/>(n = <<Nexus_Health>>)"]
        Nexus_Climate["Climate<br/>(n = <<Nexus_Climate>>)"]
    end
    Ch2L2 --> Nexus_Water
    Ch2L2 --> Nexus_Food
    Ch2L2 --> Nexus_Health
    Ch2L2 --> Nexus_Climate

    L1_GBF --> Ch2L4["<u><span style='color:#1a0dab;'>chapter_2_sdg.yaml<br/>Level 4 SDG filters</span></u>"]
    L1_NexusSets --> Ch2L4
    L1_REL --> Ch2L4
    click Ch2L4 "../search_terms/chapter_2_sdg.yaml" "Open chapter_2_sdg.yaml"
    subgraph SDGSets["SDG goal filters"]
        direction TB
        SDG1["SDG 1"]
        SDG2["SDG 2"]
        SDG3["SDG 3"]
        SDG4["SDG 4"]
        SDG5["SDG 5"]
        SDG6["SDG 6"]
        SDG7["SDG 7"]
        SDG8["SDG 8"]
        SDG9["SDG 9"]
        SDG10["SDG 10"]
        SDG11["SDG 11"]
        SDG12["SDG 12"]
        SDG13["SDG 13"]
        SDG14["SDG 14"]
        SDG15["SDG 15"]
        SDG16["SDG 16"]
        SDG17["SDG 17"]
    end
    Ch2L4 --> SDG1
    Ch2L4 --> SDG2
    Ch2L4 --> SDG3
    Ch2L4 --> SDG4
    Ch2L4 --> SDG5
    Ch2L4 --> SDG6
    Ch2L4 --> SDG7
    Ch2L4 --> SDG8
    Ch2L4 --> SDG9
    Ch2L4 --> SDG10
    Ch2L4 --> SDG11
    Ch2L4 --> SDG12
    Ch2L4 --> SDG13
    Ch2L4 --> SDG14
    Ch2L4 --> SDG15
    Ch2L4 --> SDG16
    Ch2L4 --> SDG17

Search Terms

Click chapter_2.yaml to download

Show the code
params$search_terms$chapter_2 |>
  yaml::as.yaml() |>
  cat()
GBF:
  GBF-1 - Urban:
  - urban OR
  - city OR
  - periurban OR
  - metropolis
  GBF-1 - Rural:
  - rural OR
  - agriculture OR
  - forest OR
  - mountain
  GBF-1 - Freshwater:
  - freshwater OR
  - lake OR
  - stream OR
  - current OR
  - river OR
  - wetland OR
  - watershed OR
  - groundwater OR
  - aquifer OR
  - lagoon OR
  - peatland
  GBF-1 - Marine:
  - sea OR
  - marine OR
  - ocean OR
  - coast OR
  - mangrove OR
  - seagrass OR
  - saltwater OR
  - '"brackish water" OR'
  - '"tidal flats" OR'
  - '"intertidal zone" OR'
  - subtidal
  GBF - 2 (Ecosystem restoration):
  - restoration OR
  - degradation OR
  - regeneration OR
  - '"ecosystem rehabilitation" OR'
  - '"environmental rehabilitation" OR'
  - rewilding OR
  - abandonment OR
  - '"let nature do the job" OR'
  - renaturalization OR
  - reclamation OR
  - conservation OR
  - protection
Targets:
  Target 3 (Protected areas / conservation coverage):
  - '"protected areas" OR'
  - conservation OR
  - connectivity OR
  - '"biodiversity hot spots" OR'
  - OECMs
  Target 4 (Species extinction & genetic diversity):
  - extinction OR
  - '"human-wildlife conflict" OR'
  - '"genetic diversity" OR'
  - '"Red List of Threated Species" OR'
  - '"Red List of Ecosystems" OR'
  - RLE
  Target 5 (Wild species trade & use):
  - '"Wildlife trade" OR'
  - harvesting OR
  - overexploitation OR
  - poaching OR
  - CITES
  Target 6 (Invasive alien species):
  - '"invasive species" OR'
  - '"alien species" OR'
  - IAS
  Target 7 (Pollution):
  - pollution OR
  - '"nutrient runoff" OR'
  - '"excess nutrients" OR'
  - pesticide OR
  - plastic OR
  - PFAS OR
  - '"forever chemicals" OR'
  - contamination OR
  - eutrophication OR
  - '"industrial liquid waste" OR'
  - '"solid waste" OR'
  - waste OR
  - '"saline intrusion"'
  Target 8 (Climate change & resilience):
  - '"climate change" OR'
  - resilience OR
  - '"nature-based solutions" OR'
  - '"ocean acidification"'
  Target 9 (Wild species management & use):
  - '"wild species management" OR'
  - '"sustainable use of wild species" OR'
  - '"indigenous people" OR'
  - IPLC OR
  - '"community-based management"'
  Target 10 (Sustainability in agriculture, aquaculture, forestry & fisheries):
  - agriculture OR
  - agroecology OR
  - forestry OR
  - '"fisheries aquaculture" OR'
  - '"land use management" OR'
  - '"water use management" OR'
  - '"recreational fisheries"'
  Target 11 (Nature’s contributions to people / ecosystem services):
  - '"ecosystem services" OR'
  - '"nature’s contributions to people" OR'
  - NCP OR
  - '"people’s contributions to nature"'
  Target 12 (Green & blue spaces, urban planning):
  - '"green space" OR'
  - '"blue space" OR'
  - '"urban planning" OR'
  - '"green infrastructure" OR'
  - '"blue infrastructure" OR'
  - '"green areas"'
  Target 13 (Genetic resources & benefit sharing):
  - '"genetic resources" OR'
  - '"benefit sharing" OR'
  - ILK OR
  - '"traditional knowledge" OR'
  - '"Nagoya protocol"'
  Target 14 (Biodiversity integration in decision-making):
  - '"biodiversity policy" OR'
  - '"environmental impact assessment" OR'
  - EIA OR
  - '"strategic environmental assessment" OR'
  - SEA OR
  - '"biodiversity valuation" OR'
  - '"biodiversity action"'
  Target 15 (Business & financial institutions disclosure & risk):
  - company OR
  - '"corporate responsibility" OR'
  - business OR
  - '"supply chain" OR'
  - '"corporate biodiversity reporting" OR'
  - '"social responsibility" OR'
  - investment
  Target 16 (Sustainable consumption):
  - '"sustainable consumption" OR'
  - waste OR
  - footprint
  Target 17 (Biosafety):
  - biosafety OR
  - biotechnology OR
  - GMO OR
  - '"genetically modified organisms"'
  Target 18 (Harmful incentives / subsidies):
  - subsidies OR
  - incentives OR
  - PES OR
  - '"payments for ecosystem services"'
  Target 19 (Finance mobilisation):
  - '"finance mobilization" OR'
  - funding OR
  - '"private sector" OR'
  - '"biodiversity investments"'
  Target 20 (Capacity building, technology & cooperation):
  - '"capacity building" OR'
  - education OR
  - technology OR
  - cooperation OR
  - innovation
  Target 21 (Data, knowledge & monitoring):
  - '"data governance" OR'
  - monitoring OR
  - research OR
  - evaluation
  Target 22 (Participation & inclusion):
  - '"indigenous peoples" OR'
  - ILK OR
  - '"local communities" OR'
  - youth OR
  - '"participatory governance" OR'
  - minority OR
  - '"procedural justice" OR'
  - '"non-human" OR'
  - women OR
  - girls OR
  - rights OR
  - defender OR
  - activist OR
  - guardian
  Target 23 (Gender equality):
  - gender OR
  - women OR
  - woman OR
  - girls
Related to spatial planning process:
  Set Related:
  - '"planning phases" OR'
  - '"planning stages" OR'
  - '"planning steps" OR'
  - '"planning cycle" OR'
  - '"policy formulation" OR'
  - '"decision-making" OR'
  - '"local planning practices of indigenous people" OR'
  - '"traditional practices of indigenous people" OR'
  - '"planning guidelines"'
Nexus:
  Water:
  - Water OR
  - Hydrological OR
  - Catchment OR
  - '"blue infrastructure"'
  Food:
  - food OR
  - agriculture OR
  - nutrition OR
  - malnutrition OR
  - hunger OR
  - farm
  Health:
  - health OR
  - healthy OR
  - mortality OR
  - diseases OR
  - pandemics OR
  - '"well-being" OR'
  - wellbeing
  Climate:
  - Climate OR
  - energy OR
  - emission OR
  - GHG OR
  - '"greenhouse gas" OR'
  - flood OR
  - drought

Non implemented additional searches are:

Chapter 3

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch3["<u><span style='color:#1a0dab;'>chapter_3.yaml<br/>Level 2 refinements</span></u>"]
    click Ch3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"

    subgraph Chapter3Sets["Chapter 3 searches"]
        direction TB
        C3_1["Set 1:<br/>Protected/OECM + NBSAP + cases<br/>+ spatial prioritization + regional scales<br/>(n = <<C3_1>>)"]
        C3_2["Set 2:<br/>Restoration types + inclusivity & ILK<br/>(n = <<C3_2>>)"]
        C3_3["Set 3:<br/>Restoration planning + connectivity + resilience<br/>(n = <<C3_3>>)"]
        C3_4["Set 4:<br/>Systematic conservation planning / gap analysis<br/>(n = <<C3_4>>)"]
        C3_5["Set 5:<br/>Protected area & connectivity planning<br/>(n = <<C3_5>>)"]
        C3_6["Set 6:<br/>Landscape/species/corridor networks<br/>(n = <<C3_6>>)"]
        C3_7["Set 7:<br/>Conservation planning + ecosystem services<br/>(n = <<C3_7>>)"]
        C3_8["Set 8:<br/>Participatory conservation mapping<br/>(n = <<C3_8>>)"]
        C3_9["Set 9:<br/>Conservation effectiveness + spatial planning<br/>(n = <<C3_9>>)"]
        C3_10["Set 10:<br/>Adaptive management under global change drivers<br/>(n = <<C3_10>>)"]
    end
    Ch3 --> C3_1
    Ch3 --> C3_2
    Ch3 --> C3_3
    Ch3 --> C3_4
    Ch3 --> C3_5
    Ch3 --> C3_6
    Ch3 --> C3_7
    Ch3 --> C3_8
    Ch3 --> C3_9
    Ch3 --> C3_10

Search Terms

Click chapter_3.yaml to download

Show the code
params$search_terms$chapter_3 |>
  yaml::as.yaml() |>
  cat()
Set 1:
- (((protected OR conserved) AND areas) OR "other effective area-based conservation
  measures" OR "indigenous and traditional territories") AND
- ((national AND ("Biodiversity Strategy" OR target)) OR downscaling) AND
- ("case study" OR "best practice" OR planning OR "spatial prioritization") AND
- (regional OR national OR subnational OR mountain OR marine OR (Indigenous AND (land
  OR "protected areas")) OR transboundary)
Set 2:
- restoration AND
- (inclusivity OR participation OR "co-management" OR "Indigenous knowledge" OR "traditional
  ecological knowledge" OR ILK OR "local knowledge" OR "community-based restoration"
  OR "stakeholder engagement" OR "social equity" OR justice OR "gender inclusion")
Set 3:
- ("restoration planning" OR "ecological restoration") AND
- ("ecosystem integrity" OR "ecological connectivity" OR corridors OR "migration pathways"
  OR "climate resilience" OR "participatory approaches")
Set 4: ("spatial conservation planning" OR "landscape conservation planning" OR "conservation
  gap analysis" OR "systematic conservation planning" OR "ecoregion conservation"
  OR "transboundary conservation planning")
Set 5: ("protected area planning" OR "protected area connectivity planning" OR "conservation
  priority areas" OR "marine protected area planning")
Set 6: ("landscape connectivity and conservation" OR "species connectivity" OR "planning
  conservation network" OR "ecological connectivity planning" OR "conservation corridor
  planning" OR "network conservation planning" OR "marine conservation planning" OR
  "seascape conservation planning" OR "wetland conservation planning")
Set 7: ("conservation planning" AND "ecosystem services")
Set 8: ("participatory conservation mapping" OR "community conservation mapping" OR
  "participatory spatial planning")
Set 9:
- ("conservation effectiveness" OR "protected area management effectiveness") AND
- '"spatial planning"'
Set 10:
- '"adaptive management" AND'
- ("global change" OR "climate change" OR "land use change" OR "sea use change" OR
  "invasive species" OR overexploitation OR pollution) AND
- '"spatial planning"'

Chapter 4

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch4["<u><span style='color:#1a0dab;'>chapter_4.yaml<br/>Level 2 refinements</span></u>"]
    click Ch4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"

    subgraph Chapter4Sets["Chapter 4 searches"]
        direction TB
        C4_1["Set 1:<br/>Connectivity review articles<br/>(n = <<C4_1>>)"]
        C4_2["Set 2:<br/>Connectivity benefits vs risks<br/>+ ecosystem services<br/>(n = <<C4_2>>)"]
        C4_3["Set 3:<br/>Structural vs functional connectivity<br/>(n = <<C4_3>>)"]
        C4_4["Set 4:<br/>Connectivity modelling toolkits<br/>(n = <<C4_4>>)"]
        C4_5["Set 5:<br/>Connectivity indicators & metrics<br/>(n = <<C4_5>>)"]
        C4_6["Set 6:<br/>Policy & governance integration<br/>(n = <<C4_6>>)"]
        C4_7["Set 7:<br/>Multilevel / transboundary governance<br/>+ IPLC inclusion + land tenure<br/>(n = <<C4_7>>)"]
        C4_8["Set 8:<br/>Movement ecology<br/>(dispersal / migration / permeability)<br/>(n = <<C4_8>>)"]
    end
    Ch4 --> C4_1
    Ch4 --> C4_2
    Ch4 --> C4_3
    Ch4 --> C4_4
    Ch4 --> C4_5
    Ch4 --> C4_6
    Ch4 --> C4_7
    Ch4 --> C4_8

Search Terms

Click chapter_4.yaml to download

Show the code
params$search_terms$chapter_4 |>
  yaml::as.yaml() |>
  cat()
Set 1: '"ecological connectivity"'
Set 2: ("ecological connectivity" OR "habitat connectivity" OR "landscape connectivity"
  OR "wildlife corridor" OR "biological corridor") AND (benefits OR advantages OR
  positive OR impacts OR opportunities) AND (risks OR drawbacks OR negative OR impacts
  OR challenges) AND ("ecosystem services" OR "ecosystem management")
Set 3:
- '"structural connectivity" OR'
- '"functional connectivity"'
Set 4:
- '"connectivity analysis" OR'
- '"network analysis" OR'
- '"circuit theory" OR'
- '"least-cost path" OR'
- '"graph theory" OR'
- '"resistant kernels" OR'
- '"agent-based models" OR'
- Conefor OR
- '"pattern-oriented model" OR'
- '"state-space model" OR'
- '"corridor model" OR'
- '"simulated individual" OR'
- '"movement paths" OR'
- '"hidden Markov models" OR'
- '"effective connectivity" OR'
- '"gene flow"'
Set 5: '"ecological connectivity" AND (indicator OR index OR "metric*" OR objective)'
Set 6:
- ("ecological connectivity" OR "landscape connectivity" OR "functional connectivity"
  OR "connectivity conservation") AND
- (policy OR framework OR governance OR "planning instrument" OR initiative OR agreement
  OR global OR international OR "regional strategy" OR "transboundary cooperation"
  OR "joint management" OR "cross-border conservation" OR "bioregional planning")
Set 7:
- ("ecological connectivity" OR "spatial governance") AND
- ("multi-level governance" OR "cross-scale governance" OR "transboundary governance")
  AND
- ("inclusive governance" OR "community-based management" OR "co-management") AND
- ("Indigenous Peoples" OR "Local Communities" OR IPLCs) AND
- ("policy coherence" OR "cross-sectoral integration") AND
- ("land tenure" OR "property rights" OR "private land conservation")
Set 8:
- dispersal OR
- migration OR
- nomadism OR
- '"landscape permeability"'

Chapter 5

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch5L2["<u><span style='color:#1a0dab;'>chapter_5.yaml<br/>Level 2 foresight framing</span></u>"]
    click Ch5L2 "./input/search_terms/chapter_5.yaml" "Open chapter_5.yaml"

    subgraph L2Sets["Section 5.1–5.2 searches"]
        direction TB
        C5_1["Set 1:<br/>Future + project*/predict*/scenario<br/>(n = <<C5_1>>)"]
        C5_2["Set 2:<br/>Future + pathway*/narrative*/vision*<br/>(n = <<C5_2>>)"]
        C5_3["Set 3:<br/>Future-proof*/anticipat*/scenario planning<br/>(n = <<C5_3>>)"]
        C5_4["Set 4:<br/>Foresight*/backcasting/simulat*/trend*<br/>(n = <<C5_4>>)"]
        C5_5["Set 5:<br/>Model* AND scenario<br/>(n = <<C5_5>>)"]
    end
    Ch5L2 --> C5_1
    Ch5L2 --> C5_2
    Ch5L2 --> C5_3
    Ch5L2 --> C5_4
    Ch5L2 --> C5_5

    subgraph L3Sets["Section 5.3 searches"]
        direction TB
        C5_3a["Set 1:<br/>Drivers of change<br/>(n = <<C5_3a>>)"]
        C5_3b["Set 2:<br/>Driver modelling approaches<br/>(n = <<C5_3b>>)"]
        C5_3c["Set 3:<br/>Driver gaps<br/>(n = <<C5_3c>>)"]
    end
    Ch5L2 --> C5_3a
    Ch5L2 --> C5_3b
    Ch5L2 --> C5_3c

    subgraph L4Sets["Section 5.4 searches"]
        direction TB
        C5_4a["Set 1:<br/>Interactions (synergy/trade-off/nexus)<br/>(n = <<C5_4a>>)"]
        C5_4b["Set 2:<br/>Response options (integrated planning / NbS)<br/>(n = <<C5_4b>>)"]
        C5_4c["Set 3:<br/>Cross-scale synergy & trade-off terms<br/>(n = <<C5_4c>>)"]
    end
    Ch5L2 --> C5_4a
    Ch5L2 --> C5_4b
    Ch5L2 --> C5_4c

    subgraph L5Sets["Section 5.5 searches"]
        direction TB
        C5_5a["Set 1:<br/>Adaptive / transformative management<br/>(n = <<C5_5a>>)"]
        C5_5b["Set 2:<br/>Uncertainty quantification<br/>(n = <<C5_5b>>)"]
        C5_5c["Set 3:<br/>Tipping points & thresholds<br/>(n = <<C5_5c>>)"]
        C5_5d["Set 4:<br/>Cascading risks & precaution<br/>(n = <<C5_5d>>)"]
    end
    Ch5L2 --> C5_5a
    Ch5L2 --> C5_5b
    Ch5L2 --> C5_5c
    Ch5L2 --> C5_5d

    subgraph L6Sets["Section 5.6 searches"]
        direction TB
        C5_6a["Set 1:<br/>Science-policy-practice pathways<br/>(n = <<C5_6a>>)"]
        C5_6b["Set 2:<br/>ILK integration & community planning<br/>(n = <<C5_6b>>)"]
        C5_6c["Set 3:<br/>Enabling factors & coordination<br/>(n = <<C5_6c>>)"]
        C5_6d["Set 4:<br/>Shocks, surprises, uncertainties<br/>(n = <<C5_6d>>)"]
    end
    Ch5L2 --> C5_6a
    Ch5L2 --> C5_6b
    Ch5L2 --> C5_6c
    Ch5L2 --> C5_6d

    subgraph CCSets["Cross-cutting searches"]
        direction TB
        CC1["Set 1:<br/>Scales & telecoupling<br/>(n = <<CC1>>)"]
        CC2["Set 2:<br/>Co-production & inclusion<br/>(n = <<CC2>>)"]
    end
    Ch5L2 --> CC1
    Ch5L2 --> CC2

Search Terms

Click chapter_5.yaml to download

Show the code
params$search_terms$chapter_5 |>
  yaml::as.yaml() |>
  cat()
Sections 1 and 2:
  Set 1: Future AND (projection OR projected OR predicted OR prediction OR forecast
    OR scenario)
  Set 2: Future AND (pathway OR narrative OR storyline OR foresight OR vision OR horizon
    scan OR trajectory OR imagination)
  Set 3:
  - '"future-proof" OR'
  - anticipate OR
  - '"forward-looking" OR'
  - '"futures thinking" OR'
  - '"future-oriented" OR'
  - prospective OR
  - '"plausible future" OR'
  - '"scenario planning"'
  Set 4:
  - Foresight OR
  - backcasting OR
  - simulate OR
  - simulation OR
  - '"delphi method" OR'
  - storytelling OR
  - '"environmental scan" OR'
  - trend OR
  - megatrend
  Set 5: (model AND scenario)
Section 3:
  Set 1:
  - '"drivers of change" OR'
  - '"biodiversity driver" OR'
  - '"social-ecological driver" OR'
  - '"technological driver" OR'
  - '"perennial driver" OR'
  - '"emerging driver" OR'
  - '"cascading driver"'
  Set 2:
  - '"Integrated assessment" OR'
  - '"land-use change model" OR'
  - '"Scenario model" OR'
  - '"Social-ecological model" OR'
  - '"agent-based model" OR'
  - '"telecoupled systems model" OR'
  - '"hybrid model" OR'
  - '"participatory model" OR'
  - '"data-driven foresight model"'
  Set 3:
  - '"value-based driver" OR'
  - '"compound driver" OR'
  - '"interacting driver" OR'
  - '"distant driver"'
Section 4:
  Set 1:
  - Synergy OR
  - tradeoff OR
  - '"trade-off" OR'
  - nexus OR
  - '"win-win" OR'
  - '"cross-sectoral interaction" OR'
  - '"co-benefit"'
  Set 2:
  - '"Integrated planning" OR'
  - multifunctional OR
  - '"nature-based solution" OR'
  - '"adaptive governance" OR'
  - '"cross-sectoral governance"'
  Set 3:
  - (Spatial OR temporal OR thematic OR "cross-scale") AND
  - (Synergy OR tradeoff OR "trade-off" OR nexus OR "win-win")
Section 5:
  Set 1:
  - '"Adaptative management" OR'
  - '"Adaptative governance" OR'
  - '"Transformative adaptation" OR'
  - '"Adaptive systems" OR'
  - '"Adaptive foresight"'
  Set 2:
  - (Model OR data OR "decision-making under" OR planning OR scenario OR epistemic
    OR ontological) AND
  - uncertainty
  Set 3:
  - '"Tipping points" OR'
  - thresholds OR
  - '"Planetary boundaries" OR'
  - '"Nonlinear system dynamics" OR'
  - Surprise
  Set 4:
  - '"Cascading risk" OR'
  - '"Risk management" OR'
  - '"Environmental shocks" OR'
  - '"Environmental risks" OR'
  - '"Precautionary approach"'
Section 6:
  Set 1:
  - '"Science-policy-practice" OR'
  - '"transformative pathways" OR'
  - '"transdisciplinary co-production"'
  Set 2:
  - '"Knowledge co-production" OR'
  - '"community-based spatial planning" OR'
  - '"indigenous mapping" OR'
  - '"traditional knowledge" OR'
  - '"participatory scenario planning"'
  Set 3:
  - '"Multi-level governance" OR'
  - '"institutional capacity" OR'
  - '"cross-sectoral coordination"'
  Set 4:
  - '"Planning for uncertainty" OR'
  - '"adaptive planning" OR'
  - '"resilience planning" OR'
  - '"anticipatory governance"'
Cross-cutting sets:
  Set 1: ("Spatial scaling" OR "Temporal scaling" OR "Social scale" OR "Nested governance"
    OR "Multi-scale planning" OR "Cross-scale interaction" OR Telecoupling OR Teleconnection
    OR Metacoupling OR Spillover)
  Set 2:
  - ((Indigenous OR local OR ecological OR "co-production of") AND knowledge) OR
  - pluralism OR
  - epistemic OR
  - '"Community-based" OR'
  - Biocultural OR
  - Customary OR
  - tenure OR
  - Participatory OR
  - '"Cross-cultural" OR'
  - '"knowledge integration" OR'
  - ((Gender OR Social) AND Inclusion) OR
  - '"Gender-responsive" OR'
  - Intersectionality OR
  - equity OR
  - '"Women’s roles" OR'
  - '"Women''s roles" OR'
  - '"Women`s roles" OR'
  - Gendered OR
  - Empowerment OR
  - '"capacity-building"'

Chapter 6

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch6["<u><span style='color:#1a0dab;'>chapter_6.yaml<br/>Level 2 refinements</span></u>"]
    click Ch6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

    subgraph Chapter6Sets["Chapter 6 searches"]
        direction TB
        C6_1["Set 1:<br/>Institutional & governance structures<br/>(n = <<C6_1>>)"]
        C6_2["Set 2:<br/>Political & strategic leadership<br/>(n = <<C6_2>>)"]
        C6_3["Set 3:<br/>Socio-cultural & stakeholder engagement<br/>(n = <<C6_3>>)"]
        C6_4["Set 4:<br/>Collaboration, trust & networks<br/>(n = <<C6_4>>)"]
        C6_5["Set 5:<br/>Financial & economic mechanisms<br/>(n = <<C6_5>>)"]
        C6_6["Set 6:<br/>Legal & policy frameworks<br/>(n = <<C6_6>>)"]
        C6_7["Set 7:<br/>Human & institutional capacity<br/>(n = <<C6_7>>)"]
        C6_8["Set 8:<br/>Data, knowledge & decision support<br/>(n = <<C6_8>>)"]
        C6_9["Set 9:<br/>Ecological & spatial planning tools<br/>(n = <<C6_9>>)"]
        C6_10["Set 10:<br/>Cross-cutting process enablers<br/>(n = <<C6_10>>)"]
    end
    Ch6 --> C6_1
    Ch6 --> C6_2
    Ch6 --> C6_3
    Ch6 --> C6_4
    Ch6 --> C6_5
    Ch6 --> C6_6
    Ch6 --> C6_7
    Ch6 --> C6_8
    Ch6 --> C6_9
    Ch6 --> C6_10

Ch6R2["<u><span style='color:#1a0dab;'>chapter_6_r2.yaml<br/>Optional Level 3 filter</span></u>"]
Chapter6Sets --> Ch6R2
click Ch6R2 "./input/search_terms/chapter_6_r2.yaml" "Open chapter_6_r2.yaml"
subgraph Chapter6Case["Chapter 6 searches"]
    R2["Case-study keywords<br/>(case stud*, example*, initiative*, etc.)"]
end
Ch6R2 --> R2

Search Terms

Click chapter_6.yaml to download

Show the code
params$search_terms$chapter_6 |>
  yaml::as.yaml() |>
  cat()
Set 1:
- '"institutional arrangements" OR'
- '"governance structures" OR'
- '"cross-sector coordination" OR'
- '"multi-level governance" OR'
- '"inter-agency collaboration" OR'
- '"policy coherence" OR'
- '"environmental governance" OR'
- '"landscape governance" OR'
- '"seascape governance" OR'
- '"integrated landscape management"'
Set 2:
- '"political support" OR'
- '"environmental leadership" OR'
- '"ministerial alignment" OR'
- '"strategic prioritization" OR'
- '"national biodiversity strategy"'
Set 3:
- '"stakeholder engagement" OR'
- participation OR
- '"co-design" OR'
- '"co-production" OR'
- '"community-based management" OR'
- '"indigenous governance" OR'
- '"traditional knowledge" OR'
- '"Free Prior and Informed Consent" OR'
- FPIC OR
- '"stakeholder workshops" OR'
- '"stakeholder dialogues" OR'
- '"public consultation"'
Set 4:
- collaboration OR
- trust OR
- partnership OR
- '"multi-stakeholder platform" OR'
- coalition OR
- '"inter-organizational network" OR'
- cooperation
Set 5:
- '"biodiversity finance" OR'
- '"blended finance" OR'
- '"green finance" OR'
- '"conservation trust funds" OR'
- '"Payment of ecosystem services" OR'
- '"natural capital accounting" OR'
- '"biodiversity offsets"'
Set 6:
- '"environmental law" OR'
- legislation OR
- '"statutory framework" OR'
- '"policy instruments" OR'
- '"regulatory mechanisms" OR'
- '"strategic environmental assessment" OR'
- '"Environmental Impact Assessment"'
Set 7:
- '"institutional capacity" OR'
- '"technical expertise" OR'
- '"capacity building" OR'
- training OR
- '"professional development" OR'
- '"institutional strengthening" OR'
- '"workforce development" OR'
- education OR
- pipeline OR
- '"diversity and inclusion" OR'
- '"gender inequality" OR'
- '"girl’s education" OR'
- '"girl''s education" OR'
- '"girl`s education" OR'
- '"Indigenous knowledge" OR'
- '"generational knowledge" OR'
- '"institutional memory"'
Set 8.1:
- '"species distribution maps" OR'
- (("land cover" OR "protected area") AND data) OR
- '"Indigenous knowledge" OR'
- '"knowledge co-production" OR'
- '"knowledge and data management" OR'
- '"spatial data infrastructure" OR'
- ((CARE OR FAIR) AND principles) OR
- '"open science" OR'
- '"information delivery" OR'
- (data AND (standards OR stewardship OR "management plan" OR "sharing agreement"
  OR archive OR repository OR structure)) OR
- metadata OR
- (quality AND (assurance OR control))
Set 8.2:
- '"monitoring and evaluation" OR'
- '"decision-support tools" OR'
- '"ecological model" OR'
- '"scenario planning and analysis" OR'
- ("systematic conservation planning" AND ("and model" OR tools)) OR
- '"biodiversity targets" OR'
- '"science communication" OR'
- '"science-practice gap" OR'
- '"participatory mapping and model" OR'
- '"scenario narratives" OR'
- '"evidence bridge" OR'
- '"boundary spanner and organization" OR'
- '"early adopter"'
Set 9:
- '"spatial planning" OR'
- '"landscape governance" OR'
- '"territorial integration" OR'
- '"land-use planning" OR'
- '"ecological connectivity" OR'
- '"ecological networks" OR'
- '"ecological corridors" OR'
- '"green infrastructure" OR'
- '"nature-based Strategic spatial planning solutions" OR'
- '"restoration planning" OR'
- '"blue infrastructure" OR'
- '"blue-green infrastructure" OR'
- '"spatial decision-making" OR'
- '"strategic spatial planning"'
Set 10:
- '"adaptive management" OR'
- '"feedback mechanisms" OR'
- '"monitoring and learning" OR'
- '"institutional innovation" OR'
- '"continuous improvement"'

Non implemented additional searches are:

Type Selsection

OpenAlex contains more then 270 million works of different types. The following table shows and explains the available types and highlights which are selected to be included in the SPC Corpus.

Show the code
params$types |>
  knitr::kable(
    caption = "OpenAlex Work Types and Inclusion in the SPC Corpus",
    booktabs = TRUE,
    align = c("l", "l", "l", "c")
  ) # |>
OpenAlex Work Types and Inclusion in the SPC Corpus
Type Description Included
article Scholarly journal articles and related periodical works TRUE
book Monographs and other long-form published books TRUE
book-chapter Chapters published within edited books or proceedings TRUE
dissertation Doctoral or master level theses and dissertations TRUE
editorial Editorials and editor introductions TRUE
preprint Pre-publication manuscripts shared prior to peer review TRUE
report Technical, institutional, or policy reports TRUE
review Narrative or systematic review articles TRUE
dataset Published datasets and structured data releases FALSE
erratum Published corrections to previously released works FALSE
grant Summaries or descriptions of grant-funded projects FALSE
letter Correspondence, commentaries, and short letters FALSE
libguides Library research guides and curated bibliographies FALSE
other Works that do not align with a more specific OpenAlex type FALSE
paratext Prefaces, introductions, indexes, and other paratextual items FALSE
peer-review Formal peer review reports and evaluations FALSE
reference-entry Encyclopaedia or dictionary reference entries FALSE
retraction Notices retracting previously published works FALSE
standard Standards, protocols, and technical specifications FALSE
supplementary-materials Supplementary files accompanying primary publications FALSE
Show the code
# kableExtra::kable_styling(
#     full_width = FALSE,
#     position = "left"
# )

Methods

SPC Corpus

Assess of Individual Terms in spc and nature search terms

This assessment is done on the whole of the OpenAlex corpus and only filtered for types and not for the date range.

Show the code
fn <- file.path(params$output_dir, "searchterm_assessment_spcc.rds")

if (!file.exists(fn)) {
  result <- list(
    spc = assess_search_term_both(
      st = params$search_terms$spc_corpus$spc,
      and_term = st_compact(params$search_terms$spc_corpus$spc_corpus$nature),
      types = params$types_filter,
      verbose = TRUE
    ),
    nature = assess_search_term_both(
      st = params$search_terms$spc_corpus$nature,
      and_term = st_compact(params$search_terms$spc_corpus$spc_corpus$spc),
      types = params$types_filter,
      verbose = TRUE
    )
  ) |>
    saveRDS(fn)
}

Get Key Paper

Here we get key papers in a parquet database which is partitioned by:

  • found_in: the search term or openalex which is used as the filter, i.e. the key paper occurs in corpus which would result from the search term
  • id_used: the id used to testing,m either the OpenAlex id (id) or the doi (doi)
  • page: only for processing reasons

No filtering, neither by type nor by publication year is done.

The other columns are as returned by the OpenAlex API.

Show the code
#|

dois <- params$key_papers$goldstandard$DOI[
  params$key_papers$goldstandard$DOI != ""
]
ids <- params$key_papers$goldstandard$openalex_id[
  params$key_papers$goldstandard$openalex_id != ""
]
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=openalex")
if (!dir.exists(fn)) {
  ### KP in OpenAlex
  openalexPro::pro_query(
    doi = dois,
    chunk_limit = 50
  ) |>
    openalexPro::pro_request(
      output = file.path(fn, "..", "json_doi")
    ) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "..", "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    id = ids,
    multiple_id = TRUE,
    chunk_limit = 50
  ) |>
    openalexPro::pro_request(
      output = file.path(fn, "..", "json_oa_id")
    ) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "..", "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=spc")
if (!dir.exists(fn)) {
  openalexPro::pro_query(
    title_and_abstract.search = st$spc,
    doi = dois,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(
      output = file.path(fn, "..", "json_doi")
    ) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "..", "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    title_and_abstract.search = st$spc,
    id = ids,
    multiple_id = TRUE,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_oa_id")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=nature")
if (!dir.exists(fn)) {
  ### KP in nature
  openalexPro::pro_query(
    title_and_abstract.search = st$nature,
    doi = dois,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_doi")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    title_and_abstract.search = st$nature,
    id = ids,
    multiple_id = TRUE,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_oa_id")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=spcc")
if (!dir.exists(fn)) {
  ### KP in spcc
  openalexPro::pro_query(
    title_and_abstract.search = st$spcc,
    doi = params$key_papers$goldstandard$DOI[
      params$key_papers$goldstandard$DOI != ""
    ],
    chunk_limit = 15
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_doi")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    title_and_abstract.search = st$spcc,
    id = params$key_papers$goldstandard$openalex_id[
      params$key_papers$goldstandard$openalex_id != ""
    ],
    multiple_id = TRUE,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_oa_id")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%

Keypaper in Search Terms

The in the previous step retrieved works are analysed here to get a table which shows where the key paper occur.

Show the code
fn <- file.path(params$keyworks, "kp_found_in.rds")
if (!file.exists(fn)) {
  arrow::open_dataset(file.path(params$keyworks, "parquet")) |>
    dplyr::select(
      id,
      doi,
      type,
      found_in,
      title,
      citation
    ) |>
    dplyr::group_by(id, doi, title, citation, type) |>
    dplyr::summarise(
      in_openalex = base::max(found_in == "openalex", na.rm = TRUE),
      in_spc = base::max(found_in == "spc", na.rm = TRUE),
      in_nature = base::max(found_in == "nature", na.rm = TRUE),
      in_spcc = base::max(found_in == "spcc", na.rm = TRUE),
      .groups = "drop"
    ) |>
    dplyr::collect() |>
    saveRDS(fn)
}

Get Numbers from OpenAlex of the Search Terms

These data is gathered from OpenAlex directly, not downloaded any works. The data is used to assess the quality of the TCA Corpus.

The query contains: - the search term (nature, spc, spcc) - the types selected (article, book, book-chapter, dissertation, editorial, preprint, report, review) - the date range (from 1992-01-01 to 2025-12-31)

The following counts are retrieved:

Overall hits

Show the code
#|

fn <- file.path(params$corpus, "st_hits.rds")
if (!file.exists(fn)) {
  queries <- lapply(
    st,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = s,
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to
      )
    }
  )
  queries$openalex <- openalexPro::pro_query(
    type = params$types_filter,
    from_publication_date = params$publication_date$from,
    to_publication_date = params$publication_date$to,
  )

  pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          count_only = TRUE,
          verbose = TRUE
        ) |>
        unlist()
    }
  ) |>
    do.call(what = cbind) |>
    t() |>
    as.data.frame() |>
    dplyr::select(count) |>
    saveRDS(file = fn)
}

Counts per Language

Show the code
#|

fn <- file.path(params$corpus, "st_languages.rds")
if (!file.exists(fn)) {
  queries <- lapply(
    st,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = s,
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to,
        group_by = "language"
      )
    }
  )
  queries$openalex <- openalexPro::pro_query(
    type = params$types_filter,
    from_publication_date = params$publication_date$from,
    to_publication_date = params$publication_date$to,
    group_by = "language"
  )

  pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          verbose = TRUE
        ) |>
        dplyr::bind_rows()
    }
  ) |>
    dplyr::bind_rows(.id = "source") |>
    dplyr::select(source, language = key_display_name, count) |>
    tidyr::pivot_wider(
      names_from = source,
      values_from = count,
      names_prefix = "count_",
      values_fn = list(count = sum),
      values_fill = list(count = 0)
    ) |>
    dplyr::select(
      language,
      count_openalex,
      count_spc,
      count_nature,
      count_spcc
    ) |>
    dplyr::arrange(desc(count_openalex)) |>
    saveRDS(file = fn)
}

Counts per Publication Year

Show the code
fn <- file.path(params$corpus, "st_years.rds")
if (!file.exists(fn)) {
  queries <- lapply(
    st,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = s,
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to,
        group_by = "publication_year"
      )
    }
  )
  queries$openalex <- openalexPro::pro_query(
    type = params$types_filter,
    from_publication_date = params$publication_date$from,
    to_publication_date = params$publication_date$to,
    group_by = "publication_year"
  )

  result <- pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          verbose = TRUE
        ) |>
        dplyr::bind_rows()
    }
  ) |>
    dplyr::bind_rows(.id = "source") |>
    dplyr::select(source, year = key, count) |>
    dplyr::mutate(year = base::as.integer(year)) |>
    tidyr::pivot_wider(
      names_from = source,
      values_from = count,
      names_prefix = "count_",
      values_fn = list(count = sum),
      values_fill = list(count = 0)
    ) |>
    dplyr::select(
      year,
      count_openalex,
      count_spc,
      count_nature,
      count_spcc
    ) |>
    dplyr::arrange(dplyr::desc(year)) |>
    saveRDS(file = fn)
}

Chapter 1

Show the code
# params$search_terms$chapter_1

fn <- file.path(params$chapter_1, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L1(
    sets = params$search_terms$chapter_1,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 2

Show the code
fn <- file.path(params$chapter_2, "st_hits.rds")
if (!file.exists(fn)) {
  # queries <- lapply(
  #   params$search_terms$chapter_2,
  #   function(section) {
  #     lapply(
  #       section,
  #       function(s) {
  #         openalexPro::pro_query(
  #           title_and_abstract.search = paste0(
  #             "(",
  #             st$spcc,
  #             ") AND (",
  #             st_compact(s),
  #             ")"
  #           ),
  #           type = params$types_filter,
  #           from_publication_date = params$publication_date$from,
  #           to_publication_date = params$publication_date$to
  #         )
  #       }
  #     )
  #   }
  # )

  # result <- lapply(
  #   names(queries),
  #   function(sect_nm) {
  #     result <- lapply(
  #       names(queries[[sect_nm]]),
  #       function(nm) {
  #         message("Retrieving ", sect_nm, " - ", nm, " ...")
  #         result <- c(
  #           count = NA_integer_,
  #           db_response_time_ms = NA_integer_,
  #           page = NA_integer_,
  #           per_page = NA_integer_
  #         )
  #         try(
  #           result <- queries[[sect_nm]][nm] |>
  #             openalexR::oa_request(
  #               count_only = TRUE,
  #               verbose = TRUE
  #             ) |>
  #             unlist(),
  #           silent = FALSE
  #         )
  #         return(result)
  #       }
  #     ) |>
  #       do.call(what = cbind) |>
  #       t() |>
  #       as.data.frame() |>
  #       dplyr::select(count)
  #     browser()
  #     rownames(result) <- names(queries[[sect_nm]])
  #     return(result)
  #   }
  # )
  # names(result) <- names(queries)

  get_count_L2(
    sets = params$search_terms$chapter_2,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 3

Show the code
fn <- file.path(params$chapter_3, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L1(
    sets = params$search_terms$chapter_3,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 4

Show the code
fn <- file.path(params$chapter_4, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L1(
    sets = params$search_terms$chapter_4,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 5

Show the code
fn <- file.path(params$chapter_5, "st_hits.rds")
if (!file.exists(fn)) {
  # queries <- lapply(
  #   params$search_terms$chapter_5,
  #   function(section) {
  #     lapply(
  #       section,
  #       function(s) {
  #         openalexPro::pro_query(
  #           title_and_abstract.search = paste0(
  #             "(",
  #             st$spcc,
  #             ") AND (",
  #             st_compact(s),
  #             ")"
  #           ),
  #           type = params$types_filter,
  #           from_publication_date = params$publication_date$from,
  #           to_publication_date = params$publication_date$to
  #         )
  #       }
  #     )
  #   }
  # )

  # result <- lapply(
  #   names(queries),
  #   function(sect_nm) {
  #     result <- lapply(
  #       names(queries[[sect_nm]]),
  #       function(nm) {
  #         message("Retrieving ", sect_nm, " - ", nm, " ...")
  #         result <- c(
  #           count = NA_integer_,
  #           db_response_time_ms = NA_integer_,
  #           page = NA_integer_,
  #           per_page = NA_integer_
  #         )
  #         try(
  #           result <- queries[[sect_nm]][nm] |>
  #             openalexR::oa_request(
  #               count_only = TRUE,
  #               verbose = TRUE
  #             ) |>
  #             unlist(),
  #           silent = FALSE
  #         )
  #         return(result)
  #       }
  #     ) |>
  #       do.call(what = cbind) |>
  #       t() |>
  #       as.data.frame() |>
  #       dplyr::select(count)
  #     browser()
  #     rownames(result) <- names(queries[[sect_nm]])
  #     return(result)
  #   }
  # )
  # names(result) <- names(queries)

  get_count_L2(
    sets = params$search_terms$chapter_5,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 6

Show the code
fn <- file.path(params$chapter_6, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L1(
    sets = params$search_terms$chapter_6,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}
Error in api_request(query_url, ua, query = query_ls, api_key = api_key,  : 
  HTTP status 400 Request Line is too large

Results

Assessment of Search Terms

The individual terms are assessed with the second term as AND, e,g. each individual term in spc is assessed with AND nature. In addition,

SPC Term

Show the code
readRDS(file.path(params$output, "searchterm_assessment_spcc.rds"))$spc |>
  dplyr::arrange(desc(count)) |>
  dplyr::mutate(
    count = format(count, big.mark = ","),
    count_excl = format(count_excl, big.mark = ","),
  ) |>
  knitr::kable(format = "html", escape = FALSE)
term count count_excl
(planning AND ("for ecosystem services" OR process OR scenario OR tools)) 1,220,168 743,181
(scenario AND (analysis OR "based model" OR "based planning" OR building OR planning OR thinking OR "and models" OR "of land use")) 1,024,551 701,982
(spatial AND (composition OR configuration OR "conservation prioritisation" OR "conservation prioritization" OR decision OR development OR "forest planning" OR governance OR planning OR prioritisation OR prioritization OR transformation)) 769,538 549,707
((anticipatory OR "community based" OR "forest management" OR "land-sea" OR participatory OR "place based" OR regional OR sectorial OR territorial OR urban OR "agricultural management") AND planning) 664,517 322,716
connectivity 555,390 503,227
restoration 544,901 482,717
(("land use" OR "sea use" OR marine) AND (decision OR planning OR governance OR management OR model OR scenario OR trade-offs OR tradeoffs)) 457,091 239,281
(land AND (allocation OR governance OR system)) 383,432 238,206
(adaptive AND (management OR planning)) 362,653 234,464
(conservation AND (practice OR planning OR program OR strategy)) 282,270 162,164
(("key biodiversity" OR protected OR "remote ocean") AND areas) 265,703 190,593
(landscape AND (complexity OR planning OR governance OR management OR "ecological planning")) 233,469 106,898
((integrative OR "trends and") AND scenarios) 197,616 54,009
(animal AND (migration OR movement)) 88,003 75,723
(("cumulative impact" OR "environmental impact" OR "strategic environmental") AND assessment) 70,805 51,253
((functional OR working) AND landscapes) 68,984 40,072
(ecological AND (corridor OR networks)) 62,119 35,799
zoning 56,684 40,002
(biodiversity AND (assessment OR indicators OR scenario)) 56,363 22,993
"systems integration" 52,714 45,663
((blue OR green) AND infrastructure) 40,480 24,871
("ecosystem service" AND (mapping OR model OR planning)) 32,641 7,410
((inclusive OR marine) AND governance) 26,617 13,304
"stepping stones" 18,532 16,010
(nature AND ("based solutions" OR futures)) 17,651 12,139
(integrated AND ("assessment framework" OR "assessment model" OR "coastal zone management")) 11,643 6,560
((habitat OR wildlife) AND corridor) 10,678 3,049
(("ecosystem based" OR "sea use") AND management) 7,656 2,584
"multi-criteria decision analysis" 6,986 4,784
rewilding 2,207 1,480
IPBES 1,278 709
(("generalized dissimilarity" OR macroecological) AND model) 1,258 721
"reserve design" 805 321
"futures thinking" 677 464
OECM 373 228
"critical areas for biodiversity" 20 8

Nature Term

Show the code
readRDS(file.path(params$output, "searchterm_assessment_spcc.rds"))$nature |>
  dplyr::arrange(desc(count)) |>
  dplyr::mutate(
    count = format(count, big.mark = ","),
    count_excl = format(count_excl, big.mark = ","),
  ) |>
  knitr::kable(format = "html", escape = FALSE)
term count count_excl
environment 6,823,821 4,907,107
species 4,746,932 2,916,708
nature 4,034,508 3,071,716
sustainable 3,430,821 2,366,829
soil 2,214,049 1,360,580
sea 1,449,552 793,496
forest 1,207,173 559,384
river 1,167,251 605,930
ecological 1,093,685 335,230
landscape 1,025,722 560,974
conservation 992,382 427,116
Earth 971,782 615,260
ecosystem 963,287 219,760
marine 880,736 368,458
ocean 762,272 334,384
habitat 656,037 136,357
coastal 575,028 181,591
lake 574,437 306,475
restoration 544,901 355,056
territories 542,132 330,485
mountain 501,573 244,103
coast 481,471 189,623
biodiversity 410,998 128,521
terrestrial 320,149 100,747
((protected OR conserved) AND areas) 304,117 106,003
((agricultural OR arable) AND land) 290,161 82,362
freshwater 254,327 76,785
planet 235,471 120,929
flora 234,095 116,466
fauna 211,816 58,074
maritime 182,183 104,032
plantation 176,678 77,091
desert 169,471 85,017
wildlife 166,229 46,762
wetland 165,696 54,141
grassland 139,491 32,649
estuary 112,624 30,831
bog 76,412 56,110
marshes 73,441 27,844
"natural resource" 69,657 25,412
meadow 59,819 16,610
woodland 59,125 14,182
biosphere 51,920 13,048
savanna 32,776 9,139
"coupled system" 32,203 26,240
dryland 28,904 10,146
peatland 23,253 8,615
tundra 20,653 4,778
mires 19,949 12,243
fjord 16,072 6,330
shrubland 12,661 1,167
bioeconomy 10,233 4,601
"resource system" 6,006 3,223
seascape 5,061 1,159
heathland 4,025 791
marshland 3,807 870
chaparral 3,055 1,190
"environmental resource" 2,533 817
agroforest 1,836 330
"agro-forest" 567 0

Keypaper in Corpus

No filtering, neither by type nor by publication year is done. Therefore, the pure search terms are evaluated. If a paper is included in this table, doex not mean it is included in the final SPC Corpus due to filtering by dates and types!

Show the code
readRDS(file.path(params$keyworks, "kp_found_in.rds")) |>
  dplyr::mutate(
    id_display = sub("^.*/(W[0-9]+)$", "\\1", id),
    id = sprintf("<a href=\"%s\" target=\"_blank\">%s</a>", id, id_display),
    doi_display = sub("^https://doi.org/", "\\1", doi),
    doi = sprintf("<a href=\"%s\" target=\"_blank\">%s</a>", doi, doi_display)
  ) |>
  dplyr::arrange(
    in_spcc,
    in_spc,
    in_nature,
    in_openalex
  ) |>
  dplyr::mutate(
    dplyr::across(
      dplyr::starts_with("in_"),
      ~ dplyr::case_when(
        .x ~ '<b style="color:#008000;">☑</b>', # green bold checkbox
        !.x ~ '<b style="color:#cc0000;">☐</b>' # red bold empty checkbox
      )
    )
  ) |>
  dplyr::select(
    id,
    doi,
    citation,
    in_spcc,
    in_spc,
    in_nature,
    in_openalex
  ) |>
  knitr::kable(format = "html", escape = FALSE)
id doi citation in_spcc in_spc in_nature in_openalex
W2128217744 10.1177/0306312713508669 David H. Guston (2013)
W3170399214 10.1016/j.mex.2021.101401 Daniel Beiderbeck et al. (2021)
W2964311550 10.1016/j.techfore.2019.07.002 Ian Belton et al. (2019)
W4233598570 10.1146/annurev-anthro-102218-011435 David Valentine & Amelia Hassoun (2019)
W2056591496 10.1016/s0016-3287(98)00101-3 Richard A. Slaughter (1998)
W2090312322 10.1016/j.futures.2007.11.010 Joseph Voros (2007)
W2795786882 10.1007/s00267-018-1028-3 Ida N.S. Djenontin & Alison M. Meadow (2018)
W4414957974 10.1073/pnas.2501695122 Damaris Zurell et al. (2025)
W4210765186 10.1038/s41893-021-00844-x Roslyn Henry et al. (2022)
W2116090915 10.1016/j.futures.2012.10.003 Muhammad Amer et al. (2012)
W2057938345 10.1108/14636680810855991 Sohail Inayatullah (2008)
W1973628253 10.1016/j.enpol.2005.12.006 Will McDowall & Malcolm Eames (2006)
W4238224782 10.1016/j.futures.2015.08.007 I. Milojević & Sohail Inayatullah (2015)
W1992974326 10.1016/j.futures.2007.11.011 Richard A. Slaughter (2007)
W4407294089 10.1080/02697459.2025.2459975 Romina Rodela (2025)
W2910481941 10.1080/02513625.2018.1562795 Peter Schmitt & Thorsten Wiechmann (2018)
W1990273831 10.1126/science.1242552 Silke Bauer & Bethany J. Hoye (2014)
W2784805535 10.1126/science.aam9712 Marlee A. Tucker et al. (2018)
W3085078608 10.1038/s41467-020-18457-x Michelle Ward et al. (2020)
W4281717750 10.1126/science.abl8974 Angela Brennan et al. (2022)
W1880093763 10.1111/ecog.01507 Rafael A. Magris et al. (2015)
W2783683111 10.1016/j.biocon.2017.12.020 Santiago Saura et al. (2018)
W2791599583 10.1111/conl.12439 Rafael A. Magris et al. (2018)
W4297536966 10.1016/j.tree.2022.09.002 Maria Beger et al. (2022)
W2965201645 10.1016/j.biocon.2019.07.028 Santiago Saura et al. (2019)
W3132073286 10.1016/j.biocon.2021.109008 Annika T. H. Keeley et al. (2021)
W4390696637 10.1038/s41467-023-43832-9 Rachel Neugarten et al. (2024)
W4302293680 10.1111/csp2.12823 David M. Theobald et al. (2022)
W4387055605 10.1038/s44183-023-00022-w Julie Reimer et al. (2023)
W4402144060 10.1002/ece3.70231 Amanda Liczner et al. (2024)
W4412704230 10.1073/pnas.2410937122 Robin Naidoo et al. (2025)
W4280541891 10.3389/fevo.2022.830822 Sylvia Wood et al. (2022)
W4392367143 10.1111/brv.13066 Steven J. Cooke et al. (2024)
W4410131928 10.3354/meps14888 Susanne E. Tanner et al. (2025)
W4413449508 10.1038/s41467-025-63205-8 Jedediah F. Brodie et al. (2025)
W4414925393 10.1016/j.tree.2025.09.007 Sandra Neubert et al. (2025)
W4415240687 10.1007/s10980-025-02210-0 Tamsin L. Woodman et al. (2025)
W2161139387 10.1126/science.1196624 Henrique M. Pereira et al. (2010)
W2023339029 10.1046/j.1523-1739.2003.01491.x Garry Peterson et al. (2003)
W2971398159 10.1111/rec.13035 George D. Gann et al. (2019)
W2114666631 10.1525/bio.2010.60.3.7 Timothy J. Beechie et al. (2010)
W2062482344 10.1073/pnas.1201040109 Joshua Goldstein et al. (2012)
W1540682446 10.1111/brv.12008 Aija S. Kukkala & Atte Moilanen (2012)
W2028797766 10.1016/j.cosust.2013.05.002 Ralf Seppelt et al. (2013)
W2015619301 10.1073/pnas.1000530107 Lian Pin Koh & Jaboury Ghazoul (2010)
W2015646994 10.1016/j.tree.2014.07.005 Carly N. Cook et al. (2014)
W2754686867 10.1038/s41559-017-0273-9 Isabel M.D. Rosa et al. (2017)
W3185562566 10.1038/d41586-021-02041-4 Georgina G. Gurney et al. (2021)
W4395447577 10.1126/science.adn3441 Henrique M. Pereira et al. (2024)
W4212886831 10.1111/geb.13459 Karel Mokany et al. (2022)
W2902463689 10.1016/j.tree.2018.10.006 Emily Nicholson et al. (2018)
W4386609980 10.1038/s43588-023-00503-5 Yu Zheng et al. (2023)
W2952896657 10.5194/gmd-11-4537-2018 Hyejin Kim et al. (2018)
W3161819570 10.1126/science.abc4896 Louise O’Connor et al. (2021)
W2769947232 10.1016/j.cosust.2017.10.004 Jean Paul Metzger et al. (2017)
W4386734502 10.1146/annurev-environ-112321-095011 Steven J. Cork et al. (2023)
W3151200781 10.1111/rec.13403 Ben L. Gilby et al. (2021)
W4382181311 10.1007/s11625-023-01316-1 América Paz Durán et al. (2023)
W4406904698 10.1016/j.tree.2024.12.002 Sylvaine Giakoumi et al. (2025)
W4406487214 10.1007/s10980-024-02042-4 Jiangxiao Qiu et al. (2025)
W1990241575 10.1007/s10021-004-0074-2 Paul Raskin (2005)
W56780107 10.1007/978-1-4612-0529-6_10 Jack Ahern (1999)
W2156111479 10.1111/gcb.12383 Sebastián Martinuzzi et al. (2013)
W2159760863 10.1111/j.1466-8238.2010.00620.x Joachim H. Spangenberg et al. (2011)
W3044450114 10.1016/j.envsoft.2020.104806 Andrew J. Hoskins et al. (2020)
W3074014079 10.1007/s10113-020-01685-8 Clara J. Veerkamp et al. (2020)
W2614376759 10.1016/j.envsci.2017.05.003 Vanessa M. Adams et al. (2017)
W3145276257 10.1016/j.jenvman.2021.112400 Yuyoung Choi et al. (2021)
W4382751812 10.1016/j.biocon.2023.110068 Marcel Kok et al. (2023)
W2972648221 10.1111/1365-2664.13506 Karel Mokany et al. (2019)
W4298615974 10.1007/s10980-022-01534-5 Tom Harwood et al. (2022)
W4411717980 10.1007/s11625-025-01682-y Sana Okayasu et al. (2025)
W2073677603 10.1016/j.biocon.2015.02.015 Sebastián Martinuzzi et al. (2015)
W2093445010 10.1126/science.1258832 Jianguo Liu et al. (2015)
W2122104680 10.1111/j.1523-1739.2009.01212.x William J. Sutherland et al. (2009)
W2086673960 10.1016/j.tree.2009.04.008 William J. Sutherland & Harry J. Woodroof (2009)
W3085006993 10.1002/pan3.10146 Laura Pereira et al. (2020)
W4210386268 10.1016/j.envsci.2022.01.013 Andressa V. Mansur et al. (2022)
W4380362703 10.1016/j.gloenvcha.2023.102681 Hyejin Kim et al. (2023)
W4310004272 10.1007/s11625-022-01251-7 Lucas Rutting et al. (2022)
W1963746476 10.1016/j.ecocom.2009.10.006 R.S. de Groot et al. (2009)
W2487200415 10.1016/j.marpol.2016.06.023 Elianny Domínguez-Tejo et al. (2016)
W2759207970 10.3390/su9091668 Leena Karrasch et al. (2017)
W3200717663 10.1007/s10980-021-01329-0 Jianquan Dong et al. (2021)
W3159060995 10.1016/j.ecoser.2021.101273 Karsten Grunewald et al. (2021)
W2956763155 10.1088/1748-9326/ab3234 Annika T. H. Keeley et al. (2019)
W2595174916 10.1038/35012251 C. R. Margules & Sahotra Sarkar (2000)
W4313593374 10.1016/j.mex.2022.101989 Holly Kirk et al. (2023)
W4412257196 10.5281/zenodo.6522392 Unai Pascual et al. (2022)
W3209482460 10.25607/obp-1666 Alejandro Iglesias-Campos et al. (2021)
W3100416804 10.1111/1365-2664.13796 Virgilio Hermoso et al. (2020)
W3215595594 10.1093/biosci/biab091 Abigail J. Lynch et al. (2021)
W4393866290 10.3390/su16072965 Qiqi Hu et al. (2024)
W2554309037 10.1111/btp.12386 Agnieszka E. Latawiec et al. (2016)
W4295308933 10.1073/pnas.2203385119 Natalia Estrada-Carmona et al. (2022)
W4320016094 10.1007/978-3-031-15773-8_4 Falko Buschke et al. (2023)
W4415164578 10.1098/rsos.250810 Rachael Garrett et al. (2025)
W2027491594 10.1016/j.ecolind.2015.03.029 Christian Albert et al. (2015)
W2918948909 10.1016/j.gecco.2019.e00569 Arieanna C. Balbar & Anna Meta×as (2019)
W3194313759 10.1007/978-94-024-1681-7 Christina von Haaren et al. (2019)
W2766942546 10.1080/08920753.2017.1373450 Kekuewa Kikiloi et al. (2017)
W4409833817 10.1126/science.adn2225 Jedediah F. Brodie et al. (2025)
W2524916285 10.1002/aqc.2645 Alan M. Friedlander et al. (2016)
W3021127236 10.1016/j.marpol.2020.103950 Thomas Robertson et al. (2020)
W4412750811 10.1016/j.marpol.2025.106852 Jean‐Eudes Beuret et al. (2025)
W2265414043 10.1146/annurev.ecolsys.32.081501.114012 Steward T. A. Pickett et al. (2001)
W2099188808 10.1016/j.landurbplan.2006.04.005 Jolande W. Termorshuizen et al. (2006)
W1966247992 10.1080/21513732.2011.617711 Davide Geneletti (2011)
W2884329716 10.1007/978-3-319-94021-2 László Miklós & Anna Špinerová (2018)
W4413900892 10.1016/j.tree.2025.07.014 Jian Peng et al. (2025)
W4410629764 10.1016/j.rsma.2025.104257 Liisi Lees et al. (2025)
W2255223904 NA Bob Scholes (2010)
W2978599153 10.26190/unsworks/27456 Peter H. Verburg et al. (2024)
W2035832288 10.1007/s10980-014-0085-0 Christian Albert et al. (2014)
W2604803374 10.1093/biosci/bix012 Charles H. Nilon et al. (2017)
W4220936177 10.1016/j.oneear.2022.02.008 Christopher M. Raymond et al. (2022)
W2612157793 10.1016/j.marpol.2017.06.020 Mara Ntona & Elisa Morgera (2017)
W2766457534 10.1016/j.landusepol.2017.10.017 Chiara Cortinovis & Davide Geneletti (2017)
W2999493939 10.1016/j.landurbplan.2019.103741 Christian Albert et al. (2020)
W2804302736 10.1016/j.scitotenv.2018.05.147 Maria da Luz Fernandes et al. (2018)
W4376627395 10.1016/j.marpol.2023.105655 Julie Reimer et al. (2023)
W3134065015 10.1016/j.envsci.2021.02.001 Davide Longato et al. (2021)
W4392293717 10.1016/j.ecolind.2024.111816 Wen Song et al. (2024)
W2902345284 10.1007/s10980-018-0745-6 Marcin Spyra et al. (2018)
W2046569818 10.1007/s10980-014-0052-9 Christine Fürst et al. (2014)
W2810876831 10.3897/rio.4.e28045 Evelyn Underwood et al. (2018)
W3158973852 10.1016/j.landurbplan.2021.104129 Chiara Cortinovis et al. (2021)
W2904898541 10.1007/s10668-018-00300-5 Azime Tezer et al. (2018)
W2771003204 10.1080/21513732.2017.1396257 Christine Fürst et al. (2017)
W4406477943 10.1007/s11252-024-01656-5 Israa Mahmoud et al. (2025)
W2592317409 10.1080/21513732.2017.1296494 Justice Nana Inkoom et al. (2017)
W4404646473 10.1007/s00267-024-02086-x Nina Farwig et al. (2024)
W4289516997 10.1007/s41207-022-00315-5 Georgia Pozoukidou et al. (2022)

SPC Corpus Measures and Numbers

These data is gathered from OpenAlex directly, not downloaded any works. The data is used to assess the quality of the TCA Corpus.

The query contains: - the search term (nature, spc, spcc) - the types selected (article, book, book-chapter, dissertation, editorial, preprint, report, review) - the date range (from 1992-01-01 to 2025-12-31)

Overall counts

Show the code
readRDS(file.path(params$corpus, "st_hits.rds")) |>
  dplyr::mutate(
    count = format(count, big.mark = ",")
  ) |>
  knitr::kable(format = "html", escape = FALSE)
count
nature 24,229,992
spc 5,628,273
spcc 3,006,961
openalex 204,851,303
Show the code
corpus_counts <- readRDS(file.path(params$corpus, "st_hits.rds"))

render_mermaid(
  file.path("figures", "overview.mmd"),
  list(
    SPC_LIST = format_count(corpus_counts[["spc", "count"]]),
    NATURE_LIST = format_count(corpus_counts[["nature", "count"]]),
    BASE_QUERY = format_count(corpus_counts[["spcc", "count"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart TD
    Start([Start literature search]) --> SPC["<u><span style='color:#1a0dab;'>spc_corpus.yaml<br/>Assemble base SPC corpus</span></u>"]
    click SPC "./input/search_terms/spc_corpus.yaml" "Open spc_corpus.yaml"
    SPC --> SPC_list["spc keyword set<br/>(planning & connectivity terms)<br/>(n = 5,628,273)"
]
    SPC --> NATURE_list["nature keyword set<br/>(environmental context terms)<br/>(n = 24,229,992)"
]
    SPC_list --> BaseQuery["Level 1 query<br/>spc terms AND nature dictionary<br/>(n = 3,006,961)"
]
    NATURE_list --> BaseQuery

    BaseQuery --> ChapterSelect{Apply chapter / theme refinements}

    ChapterSelect --> CH1["<u><span style='color:#1a0dab;'>Chapter 1<br/>chapter_1.yaml<br/>Governance & planning principles</span></u>"]
    click CH1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"
    ChapterSelect --> CH2["<u><span style='color:#1a0dab;'>Chapter 2<br/>chapter_2.yaml<br/>GBF targets, nexus themes, SDGs</span></u>"]
    click CH2 "./input/search_terms/chapter_2.yaml" "Open chapter_2.yaml"
    ChapterSelect --> CH3["<u><span style='color:#1a0dab;'>Chapter 3<br/>chapter_3.yaml<br/>Restoration & conservation planning</span></u>"]
    click CH3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"
    ChapterSelect --> CH4["<u><span style='color:#1a0dab;'>Chapter 4<br/>chapter_4.yaml<br/>Connectivity evidence & metrics</span></u>"]
    click CH4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"
    ChapterSelect --> CH5["<u><span style='color:#1a0dab;'>Chapter 5<br/>chapter_5.yaml<br/>Foresight & futures (sections, themes, cross-cutting)</span></u>"]
    click CH5 "./input/search_terms/Chapter_5_1_2.yaml" "Open Chapter 5 search terms"
    ChapterSelect --> CH6["<u><span style='color:#1a0dab;'>Chapter 6<br/>chapter_6.yaml (+ chapter_6_r2.yaml optional)<br/>Enabling environment</span></u>"]
    click CH6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

Publication Years

Show the code
readRDS(file.path(params$corpus, "st_years.rds")) |>
  dplyr::mutate(
    dplyr::across(
      dplyr::starts_with("count_"),
      ~ base::format(.x, big.mark = ",")
    )
  ) |>
  knitr::kable(format = "html", escape = FALSE)
year count_openalex count_spc count_nature count_spcc
2025 6,938,879 323,422 1,182,894 193,642
2024 8,781,340 401,667 1,452,555 227,334
2023 8,799,810 405,733 1,462,424 218,982
2022 8,840,595 389,250 1,416,823 198,559
2021 8,614,658 349,543 1,329,679 188,234
2020 9,447,953 339,216 1,318,872 180,797
2019 9,300,497 306,279 1,217,016 162,579
2018 8,989,603 275,085 1,117,292 145,090
2017 8,936,283 251,281 1,041,999 131,530
2016 9,093,288 238,637 1,006,873 125,473
2015 8,858,402 233,182 989,374 123,513
2014 8,658,590 220,790 962,715 116,868
2013 8,381,154 207,275 921,095 109,362
2012 7,923,416 188,585 862,146 99,964
2011 7,665,928 174,921 807,662 92,426
2010 7,163,068 158,414 751,673 83,714
2009 6,722,476 141,435 685,435 74,558
2008 6,206,905 126,365 614,938 66,458
2007 5,758,041 112,533 565,053 59,395
2006 5,433,588 103,376 524,760 54,179
2005 4,975,965 91,501 475,160 48,256
2004 4,580,369 80,459 428,955 42,290
2003 4,281,664 73,705 399,074 38,688
2002 4,073,521 70,511 384,822 36,078
2001 3,483,350 53,189 315,316 28,497
2000 3,501,195 49,537 301,768 26,542
1999 2,883,011 41,758 255,358 22,023
1998 2,788,845 38,633 242,205 20,114
1997 2,625,090 36,119 226,990 18,646
1996 2,526,251 34,586 220,850 17,615
1995 2,330,976 31,695 204,865 16,093
1994 2,201,188 28,474 190,455 14,188
1993 2,090,059 26,533 181,567 13,172
1992 1,995,345 24,584 171,329 12,102

This graph only shows the relative nuymber of publications per year to identify different trends.

Show the code
readRDS(file.path(params$corpus, "st_years.rds")) |>
  tidyr::pivot_longer(
    cols = dplyr::starts_with("count_"),
    names_to = "source",
    values_to = "count",
    names_prefix = "count_"
  ) |>
  # scale each source so its total sum is 1
  dplyr::group_by(source) |>
  dplyr::mutate(
    total_count = base::sum(count, na.rm = TRUE),
    count = dplyr::if_else(total_count > 0, count / total_count, 0)
  ) |>
  dplyr::ungroup() |>
  dplyr::select(-total_count) |>
  ggplot2::ggplot(ggplot2::aes(x = year, y = count, color = source)) +
  ggplot2::geom_line(linewidth = 1) +
  ggplot2::geom_point(size = 1.5) +
  ggplot2::scale_y_continuous(
    labels = scales::label_percent(accuracy = 1),
    expand = ggplot2::expansion(mult = c(0.02, 0.06))
  ) +
  ggplot2::labs(
    x = "Year",
    y = "Share of total works (sum-scaled per source)",
    color = "Source",
    title = "Publications per year by source (each source sums to 1)"
  ) +
  ggplot2::theme_minimal(base_size = 14) +
  ggplot2::theme(
    legend.position = "bottom",
    panel.grid.minor = ggplot2::element_blank()
  )

Language

Show the code
readRDS(file.path(params$corpus, "st_languages.rds")) |>
  dplyr::mutate(
    dplyr::across(
      dplyr::starts_with("count_"),
      ~ base::format(.x, big.mark = ",")
    )
  ) |>
  knitr::kable(format = "html", escape = FALSE)
language count_openalex count_spc count_nature count_spcc
English 148,909,715 5,286,617 22,571,452 2,844,186
Spanish 7,993,147 71,015 352,976 30,370
Japanese 7,787,056 1,689 14,791 842
French 5,977,819 38,196 270,825 20,020
German 5,954,059 13,911 67,735 5,265
Chinese 4,522,747 3,850 35,831 1,930
Portuguese 4,329,059 31,654 139,833 16,506
Indonesian 3,064,995 42,059 168,874 15,780
Korean 3,004,670 27,794 101,474 13,634
Russian 2,811,330 28,315 148,168 15,453
Italian 1,360,703 7,295 33,698 4,421
Polish 1,266,356 4,473 25,702 2,533
Turkish 883,773 5,392 26,402 2,914
Dutch 829,429 2,190 12,614 1,171
Arabic 734,427 3,592 18,949 1,541
Ukrainian 552,630 5,776 23,010 3,316
Swedish 512,749 5,565 18,326 2,607
Persian 489,646 2,465 7,816 1,494
Czech 486,956 4,087 18,986 1,663
Catalan 322,645 1,282 8,936 727
Croatian 228,101 3,082 13,750 1,586
Norwegian 196,597 1,059 4,798 504
Finnish 189,881 867 3,599 430
Latvian 189,004 2,857 13,140 610
Hungarian 176,166 1,581 7,550 821
Modern Greek (1453-) 161,584 1,081 4,296 570
Danish 160,679 334 2,696 148
Malay (macrolanguage) 152,999 2,710 10,494 1,345
Thai 108,255 2,592 5,345 919
Slovenian 106,951 829 3,892 447
Lithuanian 92,250 546 2,441 328
Vietnamese 80,014 240 1,509 174
Serbo-Croatian 79,429 1,241 4,517 606
Romanian 71,161 621 3,887 340
Serbian 65,127 552 2,593 284
NA 50,715 303 3,015 197
Slovak 37,108 306 1,745 149
Estonian 32,055 181 1,410 109
Galician 31,128 126 686 42
Hebrew 26,529 225 2,564 128
Bulgarian 25,721 180 924 102
Basque 25,341 117 629 54
Uzbek 25,008 10 1,096 5
Afrikaans 24,433 305 1,667 188
Latin 21,577 71 555 43
Esperanto 21,015 117 702 52
Hindi 13,248 25 195 10
Kazakh 12,314 152 772 81
Icelandic 11,396 57 281 32
Azerbaijani 11,321 91 415 64
Norwegian Nynorsk 10,321 49 209 22
Macedonian 8,079 56 239 26
Bosnian 7,605 88 388 47
Albanian 7,220 24 152 17
Georgian 6,389 40 197 29
Tagalog 5,503 66 287 31
Belarusian 5,015 16 124 11
Armenian 4,709 86 486 54
Tamil 4,466 11 108 3
Welsh 4,228 9 87 5
Urdu 3,973 17 229 8
Tajik 3,824 7 30 5
Irish 3,789 17 173 14
Yiddish 3,734 19 427 11
Mongolian 3,519 14 106 5
Nepali (macrolanguage) 3,181 13 122 6
Swahili (macrolanguage) 3,040 16 75 13
Bengali 2,779 14 43 9
Malagasy 2,741 5 71 3
Occitan (post 1500) 2,414 10 43 5
Kannada 2,123 10 78 4
Pushto 2,080 1 7 0
Western Frisian 2,074 12 59 7
Marathi 2,060 7 51 6
Ido 2,013 21 163 16
Breton 1,933 10 61 6
Malayalam 1,502 9 109 6
Javanese 1,385 15 63 6
Kirghiz 1,213 10 65 3
Kurdish 1,169 4 23 3
Luxembourgish 1,107 4 46 3
Sundanese 1,016 6 49 2
Sanskrit 1,007 0 11 0
Maltese 964 1 12 0
Ndonga 798 105 377 74
Sinhala 793 3 9 1
Interlingua (International Auxiliary Language Association) 768 5 17 3
Telugu 767 3 37 3
Gujarati 685 1 6 1
Interlingue 675 11 29 4
Tatar 624 7 11 4
Walloon 586 3 26 1
Scottish Gaelic 571 1 10 1
Bashkir 527 2 9 0
Dhivehi 481 0 3 0
Volapük 345 4 7 1
Burmese 342 3 16 1
Oriya (macrolanguage) 341 0 2 0
Panjabi 333 0 11 0
Tibetan 311 0 4 0
Somali 311 2 4 1
Aragonese 305 1 5 0
Haitian 291 1 16 1
Cornish 236 0 5 0
Lao 223 2 11 1
Central Khmer 219 4 10 3
Amharic 184 2 4 2
Quechua 183 0 7 0
Chechen 143 0 1 0
Manx 141 2 6 0
Limburgan 137 0 1 0
Romansh 124 2 5 1
Yoruba 98 2 7 1
Guarani 97 0 1 0
Sindhi 97 0 0 0
Uighur 62 0 1 0
Turkmen 61 1 1 1
Assamese 53 0 0 0
Norwegian Bokmål 51 1 1 0
Faroese 50 8 28 8
Chuvash 42 0 2 0
Ossetian 35 0 0 0
Komi 23 6 4 4
Sardinian 14 0 1 0
Corsican 11 0 0 0
Avaric 9 0 0 0
South Ndebele 5 2 4 2
Northern Sami 1 0 0 0
Tsonga 1 0 0 0

This graph only shows the relative number of publications per year to identify different trends.

Show the code
readRDS(file.path(params$corpus, "st_languages.rds")) |>
  # keep top 15 languages by total (before scaling)
  dplyr::mutate(
    total = count_openalex + count_spc + count_nature + count_spcc
  ) |>
  dplyr::slice_max(total, n = 15) |>
  dplyr::arrange(dplyr::desc(total)) |>
  # fix display order so largest stays on top
  dplyr::mutate(language = factor(language, levels = rev(language))) |>
  dplyr::select(-total) |>
  # reshape wide → long
  tidyr::pivot_longer(
    cols = dplyr::starts_with("count_"),
    names_to = "source",
    values_to = "count",
    names_prefix = "count_"
  ) |>
  # scale so each source sums to 1
  dplyr::group_by(source) |>
  dplyr::mutate(
    total_source = base::sum(count, na.rm = TRUE),
    count = dplyr::if_else(total_source > 0, count / total_source, 0)
  ) |>
  dplyr::ungroup() |>
  dplyr::select(-total_source) |>
  ggplot2::ggplot(ggplot2::aes(x = language, y = count, fill = source)) +
  ggplot2::geom_col(position = "dodge") +
  ggplot2::coord_flip() +
  ggplot2::scale_y_continuous(
    labels = scales::label_percent(accuracy = 1),
    expand = ggplot2::expansion(mult = c(0, 0.05))
  ) +
  ggplot2::labs(
    x = "Language",
    y = "Share of total works within each source",
    fill = "Source",
    title = "Publications by language (top 15), scaled so each source sums to 1"
  ) +
  ggplot2::theme_minimal(base_size = 14) +
  ggplot2::theme(
    legend.position = "bottom",
    panel.grid.minor = ggplot2::element_blank()
  )

Individual Chapter

Here we show the sub-searches for the individual chapters. In the tables indicating the number, an NA value indicates that the search string was to long (most likely) or any other error occured in the search. The same applies when an error message is given.

Chapter 1

Show the code
ch1_hits <- readRDS(file.path(params$chapter_1, "st_hits.rds"))

ch1_counts <- setNames(ch1_hits$count, rownames(ch1_hits))

ch1_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 7,266
Set 2 87,930
Set 3 389,485
Show the code
render_mermaid(
  file.path("figures", "chapter1.mmd"),
  c(
    C1_1 = format_count(ch1_counts[["Set 1"]]),
    C1_2 = format_count(ch1_counts[["Set 2"]]),
    C1_3 = format_count(ch1_counts[["Set 3"]])
    # C1_4 = format_count(ch1_counts[["Set 4"]]),
    # C1_5 = format_count(ch1_counts[["Set 5"]]),
    # C1_6 = format_count(ch1_counts[["Set 6"]]),
    # C1_7 = format_count(ch1_counts[["Set 7"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch1["<u><span style='color:#1a0dab;'>chapter_1.yaml<br/>Level 2 refinements</span></u>"]
    click Ch1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"

    subgraph Chapter1Sets["Chapter 1 thematic searches"]
        direction TB
        C1_1["Set 1:<br/>land/spatial planning<br/>+ biodiversity goals<br/>+ societal needs/values<br/>(n = 7,266)"]
        C1_2["Set 2:<br/>adaptive/scenario planning<br/>+ monitoring/feedback<br/>(n = 87,930)"]
        C1_3["Set 3:<br/>evidence & precaution<br/>+ ILK knowledge base<br/>(n = 389,485)"]
        %% C1_4["Set 4:<br/>multilevel/transparent governance<br/>+ customary coherence<br/>(n = <<C1_4>>)"]
        %% C1_5["Set 5:<br/>participatory planning<br/>+ co-design / engagement<br/>(n = <<C1_5>>)"]
        %% C1_6["Set 6:<br/>equity / rights / tenure<br/>+ justice outcomes<br/>(n = <<C1_6>>)"]
        %% C1_7["Set 7:<br/>connectivity (land-sea/cross-scale)<br/>+ nexus & climate links<br/>(n = <<C1_7>>)"]
    end

    Ch1 --> C1_1
    Ch1 --> C1_2
    Ch1 --> C1_3
    %% Ch1 --> C1_4
    %% Ch1 --> C1_5
    %% Ch1 --> C1_6
    %% Ch1 --> C1_7

Chapter 2

Show the code
ch2_hits <- readRDS(file.path(params$chapter_2, "st_hits.rds"))

ch2_counts <- lapply(
  ch2_hits,
  function(df) {
    setNames(df$count, rownames(df))
  }
)

do.call(
  rbind,
  lapply(names(ch2_hits), function(sect_nm) {
    df <- ch2_hits[[sect_nm]]
    df$section <- sect_nm
    df$set <- rownames(df)
    rownames(df) <- NULL
    df[,
      c("section", "set", setdiff(names(df), c("section", "set"))),
      drop = FALSE
    ]
  })
) |>
  dplyr::mutate(
    count = format_count(count)
  ) |>
  knitr::kable(
    col.names = c("Section", "Set", "Count"),
    align = c("c", "c", "r")
  )
Section Set Count
GBF GBF-1 - Urban 382,885
GBF GBF-1 - Rural 555,767
GBF GBF-1 - Freshwater 798,056
GBF GBF-1 - Marine 423,236
GBF GBF - 2 (Ecosystem restoration) 1,045,212
Targets Target 3 (Protected areas / conservation coverage) 529,601
Targets Target 4 (Species extinction & genetic diversity) 44,609
Targets Target 5 (Wild species trade & use) 87,594
Targets Target 6 (Invasive alien species) 15,118
Targets Target 7 (Pollution) 214,177
Targets Target 8 (Climate change & resilience) 238,390
Targets Target 9 (Wild species management & use) 9,569
Targets Target 10 (Sustainability in agriculture, aquaculture, forestry & fisheries) 286,289
Targets Target 11 (Nature’s contributions to people / ecosystem services) 58,009
Targets Target 12 (Green & blue spaces, urban planning) 66,803
Targets Target 13 (Genetic resources & benefit sharing) 10,235
Targets Target 14 (Biodiversity integration in decision-making) 178,394
Targets Target 15 (Business & financial institutions disclosure & risk) 262,243
Targets Target 16 (Sustainable consumption) 98,190
Targets Target 17 (Biosafety) 9,312
Targets Target 18 (Harmful incentives / subsidies) 47,401
Targets Target 19 (Finance mobilisation) 89,811
Targets Target 20 (Capacity building, technology & cooperation) 518,516
Targets Target 21 (Data, knowledge & monitoring) 1,265,863
Targets Target 22 (Participation & inclusion) 169,564
Targets Target 23 (Gender equality) 74,184
Related to spatial planning process Set Related 131,298
Nexus Water 497,394
Nexus Food 398,822
Nexus Health 415,848
Nexus Climate 626,136
Show the code
ch2_gbf <- ch2_counts[["GBF"]]
ch2_targets <- ch2_counts[["Targets"]]
ch2_rel <- ch2_counts[["Related to spatial planning process"]]
ch2_nexus <- ch2_counts[["Nexus"]]

fmt_gbf <- function(name) format_count(ch2_gbf[[name]])
fmt_target <- function(name) format_count(ch2_targets[[name]])
fmt_rel <- function(name) format_count(ch2_rel[[name]])
fmt_nexus <- function(name) format_count(ch2_nexus[[name]])

render_mermaid(
  file.path("figures", "chapter2.mmd"),
  c(
    GBF_Urban = fmt_gbf("GBF-1 - Urban"),
    GBF_Rural = fmt_gbf("GBF-1 - Rural"),
    GBF_Fresh = fmt_gbf("GBF-1 - Freshwater"),
    GBF_Marine = fmt_gbf("GBF-1 - Marine"),
    GBF_Restore = fmt_gbf("GBF - 2 (Ecosystem restoration)"),
    T3 = fmt_target("Target 3 (Protected areas / conservation coverage)"),
    T4 = fmt_target("Target 4 (Species extinction & genetic diversity)"),
    T5 = fmt_target("Target 5 (Wild species trade & use)"),
    T6 = fmt_target("Target 6 (Invasive alien species)"),
    T7 = fmt_target("Target 7 (Pollution)"),
    T8 = fmt_target("Target 8 (Climate change & resilience)"),
    T9 = fmt_target("Target 9 (Wild species management & use)"),
    T10 = fmt_target(
      "Target 10 (Sustainability in agriculture, aquaculture, forestry & fisheries)"
    ),
    T11 = fmt_target(
      "Target 11 (Nature\u2019s contributions to people / ecosystem services)"
    ),
    T12 = fmt_target("Target 12 (Green & blue spaces, urban planning)"),
    T13 = fmt_target("Target 13 (Genetic resources & benefit sharing)"),
    T14 = fmt_target("Target 14 (Biodiversity integration in decision-making)"),
    T15 = fmt_target(
      "Target 15 (Business & financial institutions disclosure & risk)"
    ),
    T16 = fmt_target("Target 16 (Sustainable consumption)"),
    T17 = fmt_target("Target 17 (Biosafety)"),
    T18 = fmt_target("Target 18 (Harmful incentives / subsidies)"),
    T19 = fmt_target("Target 19 (Finance mobilisation)"),
    T20 = fmt_target("Target 20 (Capacity building, technology & cooperation)"),
    T21 = fmt_target("Target 21 (Data, knowledge & monitoring)"),
    T22 = fmt_target("Target 22 (Participation & inclusion)"),
    T23 = fmt_target("Target 23 (Gender equality)"),
    REL = fmt_rel("Set Related"),
    Nexus_Water = fmt_nexus("Water"),
    Nexus_Food = fmt_nexus("Food"),
    Nexus_Health = fmt_nexus("Health"),
    Nexus_Climate = fmt_nexus("Climate")
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch2L2["<u><span style='color:#1a0dab;'>chapter_2.yaml<br/>Level 2 GBF bundles</span></u>"]
    click Ch2L2 "../search_terms/chapter_2.yaml" "Open chapter_2.yaml"

    subgraph L1_GBF["GBF contexts & targets"]
        direction TB
        GBF_Urban["GBF-1 Urban<br/>(n = 382,885)"]
        GBF_Rural["GBF-1 Rural<br/>(n = 555,767)"]
        GBF_Fresh["GBF-1 Freshwater<br/>(n = 798,056)"]
        GBF_Marine["GBF-1 Marine<br/>(n = 423,236)"]
        GBF_Restore["GBF-2 Ecosystem restoration<br/>(n = 1,045,212)"]
    end
    Ch2L2 --> GBF_Urban
    Ch2L2 --> GBF_Rural
    Ch2L2 --> GBF_Fresh
    Ch2L2 --> GBF_Marine
    Ch2L2 --> GBF_Restore

    subgraph L1_TARGET["GBF contexts & targets"]
        T3["Target 3<br/>(n = 529,601)"]
        T4["Target 4<br/>(n = 44,609)"]
        T5["Target 5<br/>(n = 87,594)"]
        T6["Target 6<br/>(n = 15,118)"]
        T7["Target 7<br/>(n = 214,177)"]
        T8["Target 8<br/>(n = 238,390)"]
        T9["Target 9<br/>(n = 9,569)"]
        T10["Target 10<br/>(n = 286,289)"]
        T11["Target 11<br/>(n = 58,009)"]
        T12["Target 12<br/>(n = 66,803)"]
        T13["Target 13<br/>(n = 10,235)"]
        T14["Target 14<br/>(n = 178,394)"]
        T15["Target 15<br/>(n = 262,243)"]
        T16["Target 16<br/>(n = 98,190)"]
        T17["Target 17<br/>(n = 9,312)"]
        T18["Target 18<br/>(n = 47,401)"]
        T19["Target 19<br/>(n = 89,811)"]
        T20["Target 20<br/>(n = 518,516)"]
        T21["Target 21<br/>(n = 1,265,863)"]
        T22["Target 22<br/>(n = 169,564)"]
        T23["Target 23<br/>(n = 74,184)"]
    end
    Ch2L2 --> T3
    Ch2L2 --> T4
    Ch2L2 --> T5
    Ch2L2 --> T6
    Ch2L2 --> T7
    Ch2L2 --> T8
    Ch2L2 --> T9
    Ch2L2 --> T10
    Ch2L2 --> T11
    Ch2L2 --> T12
    Ch2L2 --> T13
    Ch2L2 --> T14
    Ch2L2 --> T15
    Ch2L2 --> T16
    Ch2L2 --> T17
    Ch2L2 --> T18
    Ch2L2 --> T19
    Ch2L2 --> T20
    Ch2L2 --> T21
    Ch2L2 --> T22
    Ch2L2 --> T23

    subgraph L1_REL["Spatial Planning Related"]
        REL["Spatial Planning Related<br/>(n = 131,298)"]
    end
    Ch2L2 --> REL

    subgraph L1_NexusSets["Nexus"]
        direction TB
        Nexus_Water["Water<br/>(n = 497,394)"]
        Nexus_Food["Food<br/>(n = 398,822)"]
        Nexus_Health["Health<br/>(n = 415,848)"]
        Nexus_Climate["Climate<br/>(n = 626,136)"]
    end
    Ch2L2 --> Nexus_Water
    Ch2L2 --> Nexus_Food
    Ch2L2 --> Nexus_Health
    Ch2L2 --> Nexus_Climate

    L1_GBF --> Ch2L4["<u><span style='color:#1a0dab;'>chapter_2_sdg.yaml<br/>Level 4 SDG filters</span></u>"]
    L1_NexusSets --> Ch2L4
    L1_REL --> Ch2L4
    click Ch2L4 "../search_terms/chapter_2_sdg.yaml" "Open chapter_2_sdg.yaml"
    subgraph SDGSets["SDG goal filters"]
        direction TB
        SDG1["SDG 1"]
        SDG2["SDG 2"]
        SDG3["SDG 3"]
        SDG4["SDG 4"]
        SDG5["SDG 5"]
        SDG6["SDG 6"]
        SDG7["SDG 7"]
        SDG8["SDG 8"]
        SDG9["SDG 9"]
        SDG10["SDG 10"]
        SDG11["SDG 11"]
        SDG12["SDG 12"]
        SDG13["SDG 13"]
        SDG14["SDG 14"]
        SDG15["SDG 15"]
        SDG16["SDG 16"]
        SDG17["SDG 17"]
    end
    Ch2L4 --> SDG1
    Ch2L4 --> SDG2
    Ch2L4 --> SDG3
    Ch2L4 --> SDG4
    Ch2L4 --> SDG5
    Ch2L4 --> SDG6
    Ch2L4 --> SDG7
    Ch2L4 --> SDG8
    Ch2L4 --> SDG9
    Ch2L4 --> SDG10
    Ch2L4 --> SDG11
    Ch2L4 --> SDG12
    Ch2L4 --> SDG13
    Ch2L4 --> SDG14
    Ch2L4 --> SDG15
    Ch2L4 --> SDG16
    Ch2L4 --> SDG17

Chapter 3

Show the code
ch3_hits <- readRDS(file.path(params$chapter_3, "st_hits.rds"))

ch3_counts <- setNames(ch3_hits$count, rownames(ch3_hits))

ch3_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 2,285
Set 2 11,325
Set 3 661
Set 4 1,322
Set 5 559
Set 6 437
Set 7 697
Set 8 27
Set 9 0
Set 10 26
Show the code
render_mermaid(
  file.path("figures", "chapter3.mmd"),
  c(
    C3_1 = format_count(ch3_counts[["Set 1"]]),
    C3_2 = format_count(ch3_counts[["Set 2"]]),
    C3_3 = format_count(ch3_counts[["Set 3"]]),
    C3_4 = format_count(ch3_counts[["Set 4"]]),
    C3_5 = format_count(ch3_counts[["Set 5"]]),
    C3_6 = format_count(ch3_counts[["Set 6"]]),
    C3_7 = format_count(ch3_counts[["Set 7"]]),
    C3_8 = format_count(ch3_counts[["Set 8"]]),
    C3_9 = format_count(ch3_counts[["Set 9"]]),
    C3_10 = format_count(ch3_counts[["Set 10"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch3["<u><span style='color:#1a0dab;'>chapter_3.yaml<br/>Level 2 refinements</span></u>"]
    click Ch3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"

    subgraph Chapter3Sets["Chapter 3 searches"]
        direction TB
        C3_1["Set 1:<br/>Protected/OECM + NBSAP + cases<br/>+ spatial prioritization + regional scales<br/>(n = 2,285)"]
        C3_2["Set 2:<br/>Restoration types + inclusivity & ILK<br/>(n = 11,325)"]
        C3_3["Set 3:<br/>Restoration planning + connectivity + resilience<br/>(n = 661)"]
        C3_4["Set 4:<br/>Systematic conservation planning / gap analysis<br/>(n = 1,322)"]
        C3_5["Set 5:<br/>Protected area & connectivity planning<br/>(n = 559)"]
        C3_6["Set 6:<br/>Landscape/species/corridor networks<br/>(n = 437)"]
        C3_7["Set 7:<br/>Conservation planning + ecosystem services<br/>(n = 697)"]
        C3_8["Set 8:<br/>Participatory conservation mapping<br/>(n = 27)"]
        C3_9["Set 9:<br/>Conservation effectiveness + spatial planning<br/>(n = 0)"]
        C3_10["Set 10:<br/>Adaptive management under global change drivers<br/>(n = 26)"]
    end
    Ch3 --> C3_1
    Ch3 --> C3_2
    Ch3 --> C3_3
    Ch3 --> C3_4
    Ch3 --> C3_5
    Ch3 --> C3_6
    Ch3 --> C3_7
    Ch3 --> C3_8
    Ch3 --> C3_9
    Ch3 --> C3_10

Chapter 4

Show the code
ch4_hits <- readRDS(file.path(params$chapter_4, "st_hits.rds"))

ch4_counts <- setNames(ch4_hits$count, rownames(ch4_hits))

ch4_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 1,381
Set 2 241
Set 3 6,263
Set 4 29,764
Set 5 371
Set 6 2,657
Set 7 0
Set 8 89,852
Show the code
render_mermaid(
  file.path("figures", "chapter4.mmd"),
  c(
    C4_1 = format_count(ch4_counts[["Set 1"]]),
    C4_2 = format_count(ch4_counts[["Set 2"]]),
    C4_3 = format_count(ch4_counts[["Set 3"]]),
    C4_4 = format_count(ch4_counts[["Set 4"]]),
    C4_5 = format_count(ch4_counts[["Set 5"]]),
    C4_6 = format_count(ch4_counts[["Set 6"]]),
    C4_7 = format_count(ch4_counts[["Set 7"]]),
    C4_8 = format_count(ch4_counts[["Set 8"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch4["<u><span style='color:#1a0dab;'>chapter_4.yaml<br/>Level 2 refinements</span></u>"]
    click Ch4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"

    subgraph Chapter4Sets["Chapter 4 searches"]
        direction TB
        C4_1["Set 1:<br/>Connectivity review articles<br/>(n = 1,381)"]
        C4_2["Set 2:<br/>Connectivity benefits vs risks<br/>+ ecosystem services<br/>(n = 241)"]
        C4_3["Set 3:<br/>Structural vs functional connectivity<br/>(n = 6,263)"]
        C4_4["Set 4:<br/>Connectivity modelling toolkits<br/>(n = 29,764)"]
        C4_5["Set 5:<br/>Connectivity indicators & metrics<br/>(n = 371)"]
        C4_6["Set 6:<br/>Policy & governance integration<br/>(n = 2,657)"]
        C4_7["Set 7:<br/>Multilevel / transboundary governance<br/>+ IPLC inclusion + land tenure<br/>(n = 0)"]
        C4_8["Set 8:<br/>Movement ecology<br/>(dispersal / migration / permeability)<br/>(n = 89,852)"]
    end
    Ch4 --> C4_1
    Ch4 --> C4_2
    Ch4 --> C4_3
    Ch4 --> C4_4
    Ch4 --> C4_5
    Ch4 --> C4_6
    Ch4 --> C4_7
    Ch4 --> C4_8

Chapter 5

Show the code
ch5_hits <- readRDS(file.path(params$chapter_5, "st_hits.rds"))

ch5_counts <- lapply(ch5_hits, function(df) {
  setNames(df$count, rownames(df))
})

do.call(
  rbind,
  lapply(names(ch5_hits), function(sect_nm) {
    df <- ch5_hits[[sect_nm]]
    df$section <- sect_nm
    df$set <- rownames(df)
    rownames(df) <- NULL
    df[,
      c("section", "set", setdiff(names(df), c("section", "set"))),
      drop = FALSE
    ]
  })
) |>
  dplyr::mutate(
    count = format_count(count)
  ) |>
  knitr::kable(
    col.names = c("Section", "Set", "Count"),
    align = c("c", "c", "r")
  )
Section Set Count
Sections 1 and 2 Set 1 202,591
Sections 1 and 2 Set 2 62,438
Sections 1 and 2 Set 3 61,335
Sections 1 and 2 Set 4 424,409
Sections 1 and 2 Set 5 266,970
Section 3 Set 1 2,909
Section 3 Set 2 15,557
Section 3 Set 3 116
Section 4 Set 1 63,088
Section 4 Set 2 21,541
Section 4 Set 3 14,200
Section 5 Set 1 15,125
Section 5 Set 2 84,444
Section 5 Set 3 53,631
Section 5 Set 4 29,081
Section 6 Set 1 173
Section 6 Set 2 4,237
Section 6 Set 3 3,077
Section 6 Set 4 2,498
Cross-cutting sets Set 1 45,596
Cross-cutting sets Set 2 231,886
Show the code
fmt_ch5 <- function(section, set) {
  format_count(ch5_counts[[section]][[set]])
}

render_mermaid(
  file.path("figures", "chapter5.mmd"),
  c(
    C5_1 = fmt_ch5("Sections 1 and 2", "Set 1"),
    C5_2 = fmt_ch5("Sections 1 and 2", "Set 2"),
    C5_3 = fmt_ch5("Sections 1 and 2", "Set 3"),
    C5_4 = fmt_ch5("Sections 1 and 2", "Set 4"),
    C5_5 = fmt_ch5("Sections 1 and 2", "Set 5"),
    C5_3a = fmt_ch5("Section 3", "Set 1"),
    C5_3b = fmt_ch5("Section 3", "Set 2"),
    C5_3c = fmt_ch5("Section 3", "Set 3"),
    C5_4a = fmt_ch5("Section 4", "Set 1"),
    C5_4b = fmt_ch5("Section 4", "Set 2"),
    C5_4c = fmt_ch5("Section 4", "Set 3"),
    C5_5a = fmt_ch5("Section 5", "Set 1"),
    C5_5b = fmt_ch5("Section 5", "Set 2"),
    C5_5c = fmt_ch5("Section 5", "Set 3"),
    C5_5d = fmt_ch5("Section 5", "Set 4"),
    C5_6a = fmt_ch5("Section 6", "Set 1"),
    C5_6b = fmt_ch5("Section 6", "Set 2"),
    C5_6c = fmt_ch5("Section 6", "Set 3"),
    C5_6d = fmt_ch5("Section 6", "Set 4"),
    CC1 = fmt_ch5("Cross-cutting sets", "Set 1"),
    CC2 = fmt_ch5("Cross-cutting sets", "Set 2")
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch5L2["<u><span style='color:#1a0dab;'>chapter_5.yaml<br/>Level 2 foresight framing</span></u>"]
    click Ch5L2 "./input/search_terms/chapter_5.yaml" "Open chapter_5.yaml"

    subgraph L2Sets["Section 5.1–5.2 searches"]
        direction TB
        C5_1["Set 1:<br/>Future + project*/predict*/scenario<br/>(n = 202,591)"]
        C5_2["Set 2:<br/>Future + pathway*/narrative*/vision*<br/>(n = 62,438)"]
        C5_3["Set 3:<br/>Future-proof*/anticipat*/scenario planning<br/>(n = 61,335)"]
        C5_4["Set 4:<br/>Foresight*/backcasting/simulat*/trend*<br/>(n = 424,409)"]
        C5_5["Set 5:<br/>Model* AND scenario<br/>(n = 266,970)"]
    end
    Ch5L2 --> C5_1
    Ch5L2 --> C5_2
    Ch5L2 --> C5_3
    Ch5L2 --> C5_4
    Ch5L2 --> C5_5

    subgraph L3Sets["Section 5.3 searches"]
        direction TB
        C5_3a["Set 1:<br/>Drivers of change<br/>(n = 2,909)"]
        C5_3b["Set 2:<br/>Driver modelling approaches<br/>(n = 15,557)"]
        C5_3c["Set 3:<br/>Driver gaps<br/>(n = 116)"]
    end
    Ch5L2 --> C5_3a
    Ch5L2 --> C5_3b
    Ch5L2 --> C5_3c

    subgraph L4Sets["Section 5.4 searches"]
        direction TB
        C5_4a["Set 1:<br/>Interactions (synergy/trade-off/nexus)<br/>(n = 63,088)"]
        C5_4b["Set 2:<br/>Response options (integrated planning / NbS)<br/>(n = 21,541)"]
        C5_4c["Set 3:<br/>Cross-scale synergy & trade-off terms<br/>(n = 14,200)"]
    end
    Ch5L2 --> C5_4a
    Ch5L2 --> C5_4b
    Ch5L2 --> C5_4c

    subgraph L5Sets["Section 5.5 searches"]
        direction TB
        C5_5a["Set 1:<br/>Adaptive / transformative management<br/>(n = 15,125)"]
        C5_5b["Set 2:<br/>Uncertainty quantification<br/>(n = 84,444)"]
        C5_5c["Set 3:<br/>Tipping points & thresholds<br/>(n = 53,631)"]
        C5_5d["Set 4:<br/>Cascading risks & precaution<br/>(n = 29,081)"]
    end
    Ch5L2 --> C5_5a
    Ch5L2 --> C5_5b
    Ch5L2 --> C5_5c
    Ch5L2 --> C5_5d

    subgraph L6Sets["Section 5.6 searches"]
        direction TB
        C5_6a["Set 1:<br/>Science-policy-practice pathways<br/>(n = 173)"]
        C5_6b["Set 2:<br/>ILK integration & community planning<br/>(n = 4,237)"]
        C5_6c["Set 3:<br/>Enabling factors & coordination<br/>(n = 3,077)"]
        C5_6d["Set 4:<br/>Shocks, surprises, uncertainties<br/>(n = 2,498)"]
    end
    Ch5L2 --> C5_6a
    Ch5L2 --> C5_6b
    Ch5L2 --> C5_6c
    Ch5L2 --> C5_6d

    subgraph CCSets["Cross-cutting searches"]
        direction TB
        CC1["Set 1:<br/>Scales & telecoupling<br/>(n = 45,596)"]
        CC2["Set 2:<br/>Co-production & inclusion<br/>(n = 231,886)"]
    end
    Ch5L2 --> CC1
    Ch5L2 --> CC2

Chapter 6

Show the code
ch6_hits <- readRDS(file.path(params$chapter_6, "st_hits.rds"))

ch6_counts <- setNames(ch6_hits$count, rownames(ch6_hits))

ch6_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 12,544
Set 2 1,529
Set 3 84,593
Set 4 169,909
Set 5 3,607
Set 6 56,385
Set 7 254,629
Set 8.1 NA
Set 8.2 18,664
Set 9 60,301
Set 10 18,970
Show the code
render_mermaid(
  file.path("figures", "chapter6.mmd"),
  c(
    C6_1 = format_count(ch6_counts[["Set 1"]]),
    C6_2 = format_count(ch6_counts[["Set 2"]]),
    C6_3 = format_count(ch6_counts[["Set 3"]]),
    C6_4 = format_count(ch6_counts[["Set 4"]]),
    C6_5 = format_count(ch6_counts[["Set 5"]]),
    C6_6 = format_count(ch6_counts[["Set 6"]]),
    C6_7 = format_count(ch6_counts[["Set 7"]]),
    C6_8 = format_count(sum(ch6_counts[c("Set 8.1", "Set 8.2")], na.rm = TRUE)),
    C6_9 = format_count(ch6_counts[["Set 9"]]),
    C6_10 = format_count(ch6_counts[["Set 10"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch6["<u><span style='color:#1a0dab;'>chapter_6.yaml<br/>Level 2 refinements</span></u>"]
    click Ch6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

    subgraph Chapter6Sets["Chapter 6 searches"]
        direction TB
        C6_1["Set 1:<br/>Institutional & governance structures<br/>(n = 12,544)"]
        C6_2["Set 2:<br/>Political & strategic leadership<br/>(n = 1,529)"]
        C6_3["Set 3:<br/>Socio-cultural & stakeholder engagement<br/>(n = 84,593)"]
        C6_4["Set 4:<br/>Collaboration, trust & networks<br/>(n = 169,909)"]
        C6_5["Set 5:<br/>Financial & economic mechanisms<br/>(n = 3,607)"]
        C6_6["Set 6:<br/>Legal & policy frameworks<br/>(n = 56,385)"]
        C6_7["Set 7:<br/>Human & institutional capacity<br/>(n = 254,629)"]
        C6_8["Set 8:<br/>Data, knowledge & decision support<br/>(n = 18,664)"]
        C6_9["Set 9:<br/>Ecological & spatial planning tools<br/>(n = 60,301)"]
        C6_10["Set 10:<br/>Cross-cutting process enablers<br/>(n = 18,970)"]
    end
    Ch6 --> C6_1
    Ch6 --> C6_2
    Ch6 --> C6_3
    Ch6 --> C6_4
    Ch6 --> C6_5
    Ch6 --> C6_6
    Ch6 --> C6_7
    Ch6 --> C6_8
    Ch6 --> C6_9
    Ch6 --> C6_10

Ch6R2["<u><span style='color:#1a0dab;'>chapter_6_r2.yaml<br/>Optional Level 3 filter</span></u>"]
Chapter6Sets --> Ch6R2
click Ch6R2 "./input/search_terms/chapter_6_r2.yaml" "Open chapter_6_r2.yaml"
subgraph Chapter6Case["Chapter 6 searches"]
    R2["Case-study keywords<br/>(case stud*, example*, initiative*, etc.)"]
end
Ch6R2 --> R2

Reuse

Citation

BibTeX citation:
@report{krug,
  author = {Krug, Rainer M. and Bishop, Gabriella and Villasante,
    Sebastian},
  title = {Spatial {Planning} and {Connectivity} {Corpus} - {Technical}
    {Background} {Report}},
  doi = {10.5281/zenodo.XXXXX},
  langid = {en},
  abstract = {To Be added}
}
For attribution, please cite this work as:
Krug, Rainer M., Gabriella Bishop, and Sebastian Villasante. n.d. “Spatial Planning and Connectivity Corpus - Technical Background Report.” IPBES Spatial Planning and Connectivity Assessment. https://doi.org/10.5281/zenodo.XXXXX.